Etsy API Pagination с переполнением стека

Итак, я довольно новичок в работе с 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 результатов, но это не так. У кого-нибудь есть опыт работы с этим? Есть ли где-то меня сбивают с толку?

Спасибо!

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]