簡體   English   中英

使用PHP的Etsy API分頁

[英]Etsy API Pagination with PHP

因此,我對使用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個結果,但事實並非如此。 任何人都有與此相關的經驗嗎? 有我要絆倒的地方嗎?

謝謝!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM