1

そのため、私は 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 個の結果セットを返すと思っていましたが、そうではありませんでした。誰でもこれを使用した経験がありますか? つまずいたところはありますか?

ありがとう!

4

1 に答える 1

1

あなたのブロックでは、プロパティwhileの値を に代入しています。 しかし、実際の値はURL ではなく、2 です。 代わりに、クエリ文字列変数として最初の URL に追加します。next_page$url
int
next_page

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

各プロセスを関数に分離する方法の例を以下に示します。

curlからオブジェクトを返す独自の関数に操作を移動しますjson_decode

リストの処理全体を別の関数に移し、今のところ、リストを出力するだけです。

この 2 番目の関数は再帰的です。つまり、次のページが存在する場合、最初の関数を呼び出し、応答を取得してから処理します。

<?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);
于 2015-12-01T11:54:18.780 に答える