首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP进行Etsy API分页

用PHP进行Etsy API分页
EN

Stack Overflow用户
提问于 2015-12-01 00:27:07
回答 1查看 1.2K关注 0票数 1

因此,我对使用API相当陌生,我只是尝试使用Etsy来显示特定的清单。

默认情况下,API返回一组25个结果,每次最多可执行100次。我想展示更多,所以我尝试在我的电话中增加分页。到目前为止,我得到的是:

代码语言:javascript
复制
<?php

//setting API key

define("API_KEY", XXX);

//setting request url

$url = "https://openapi.etsy.com/v2/listings/active?keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY;

while (isset($url) && $url != '') {

        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $response_body=curl_exec($curl);
        curl_close($curl);

        $response = json_decode($response_body);

        foreach ($response->results as $listing) {
                echo "<li>" . $listing->title . " ~*~ " . $listing->price . " " . $listing->currency_code . " ~*~ " . '<a href="' . $listing->url . '" target="_blank">View on Etsy!</a>' . "</li>" . "<br>";
        }

        $url = $response->pagination->next_page;
}

?>

我认为这会循环通过,并返回下一组25的结果,但它没有。谁有经验处理这个?有什么地方我被绊倒了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 11:54:18

while块中,将next_page属性的值分配给$url

但实际值是int,2,而不是url。

相反,将next_page附加到初始url,作为查询字符串变量。

代码语言:javascript
复制
$url .= "&page=" . $response->pagination->next_page;

参见下面的示例,说明如何将每个进程隔离到一个函数中。

我们将curl操作移动到它自己的函数中,其中它从json_decode返回一个对象。

我们将清单的整个处理过程移到一个单独的函数中,此时,它只是打印清单。

第二个函数是递归的,意思是,如果下一个页面存在,它将调用第一个函数,获取响应,然后处理它。

代码语言:javascript
复制
<?php
//setting API key

define("API_KEY", 'br4j52uzdtlcpp6qxb6we3ge');

function get_listings($page=1){

    $url = "https://openapi.etsy.com/v2/listings/active?keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY;

    $url .= "&page=$page";

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response_body=curl_exec($curl);
    curl_close($curl);

    $responseObject = json_decode($response_body);
    return $responseObject;
}

function process_listings($responseObject){

    foreach ($responseObject->results as $listing) {
        echo "Title: " . $listing->title . PHP_EOL . 
            "Price " . $listing->price . PHP_EOL . 
            "Currency code " . $listing->currency_code . PHP_EOL . 
            'URL ' . $listing->url . PHP_EOL;
    }

    print PHP_EOL . "Pagination " . $responseObject->pagination->next_page . PHP_EOL;
    $next_page = $responseObject->pagination->next_page;
    if ($next_page) {
        $nextPageResponse = get_listings($next_page);
        process_listings($nextPageResponse);
    }
}

$firstPage = get_listings(); // page 1 is default
process_listings($firstPage);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34010556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档