【问题标题】:Etsy API Pagination with PHP使用 PHP 进行 Etsy API 分页
【发布时间】:2015-12-01 19:54:18
【问题描述】:

所以,我对使用 API 还很陌生,我只是想尝试使用 Etsy API 来显示一组特定的列表。

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

<?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 个结果,但事实并非如此。有谁有这方面工作的经验?有什么地方让我绊倒了吗?

谢谢!

【问题讨论】:

    标签: php pagination etsy


    【解决方案1】:

    在您的while 块中,您将next_page 属性的值分配给$url
    但实际值是int, 2,而不是 url。
    而是将 next_page 作为查询字符串变量附加到初始 url。

    $url .= "&page=" . $response->pagination->next_page;
    

    请参阅下面的示例,了解如何将每个进程隔离到一个函数。

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

    我们将列表的整个处理转移到一个单独的函数中,现在它只是打印出列表。

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

    <?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);
    

    【讨论】:

    • 啊,完美。是的,我后来意识到做一个 $url 的 var_dump 并没有返回一个实际的 url,这就是它没有重定向的原因,但是在找到一个干净的方法来解决这个问题时遇到了一些麻烦。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多