Код
Я создал класс PHP для связи с API-интерфейсом Instagram. Я использую частные функции под названием api_request
(как показано ниже), чтобы общаться с API Instagram в:Почему постраничная страница Instagram возвращает одну и ту же страницу снова и снова?
private function api_request($request = null) {
if (is_null($request)) {
$request = $this->request["httpRequest"];
}
$body = wp_remote_retrieve_body(wp_remote_get($request, array(
"timeout" => 10,
"content-type" => "application/json"
)
)
);
try {
$response = json_decode($body, true);
$this->data["pagination"] = $response["pagination"]["next_url"];
$this->data["response"] = $response["data"];
$this->setup_data($this->data);
} catch (Exception $ex) {
$this->data = null;
}
}
Эти две строки кода ...
$this->data["pagination"] = $response["pagination"]["next_url"];
$this->data["response"] = $response["data"];
... устанавливает мои данные в этом массиве :
private $data = array (
"response" => null,
"pagination" => null,
"photos" => array()
);
Проблема
Всякий раз, когда я прошу на следующей странице, с помощью следующей функции:
public function pagination_query() {
$this->api_request($this->data["pagination"]);
$output = json_encode($this->data["photos"]);
return $output;
}
Instagram дает мне первую страницу, снова и снова и усиления. Любая идея, в чем проблема?
Update # 1
я понял, что, потому что моя setup_data
функция (используется в api_request
функции) толкает мои фото объекты на конце моего $this->data["photos"]
массива:
private function setup_data($data) {
foreach ($data["response"] as $obj) {
/* code that parses the api, goes here */
/* pushes new object onto photo stack */
array_push($this->data["photos"], $new_obj);
}
}
... это необходимо создать пустой массив при запросе на новую страницу:
public function pagination_query() {
$this->data["photos"] = array(); // kicks out old photo objects
$this->api_request($this->data["pagination"]);
$output = json_encode($this->data["photos"]);
return $output;
}
Я могу получить вторую страницу, но все последующие вызовы pagination_query
возвращают только вторую страницу. Любые идеи, что может быть неправильным?
Update # 2
я обнаружил, что с помощью while
заявление, чтобы сделать функцию api_request
называть себя, позволяет мне получить страницу за страницей, просто отлично:
private function api_request($request = null) {
if (is_null($request)) {
$request = $this->request["httpRequest"];
}
$body = wp_remote_retrieve_body(wp_remote_get($request, array(
"timeout" => 18,
"content-type" => "application/json"
)
)
);
try {
$response = json_decode($body, true);
$this->data["response"] = $response["data"];
$this->data["next_page"] = $response["pagination"]["next_url"];
$this->setup_data($this->data);
// while state returns page after page just fine
while (count($this->data["photos"]) < 80) {
$this-> api_request($this->data["next_page"]);
}
} catch (Exception $ex) {
$this->data = null;
}
}
Однако это Безразлично 't исправить мою функцию pagination_query
, и кажется, что мой блок try-catch
создает закрытие, и я не совсем уверен, что с этим делать.
Что такое результат массива '$ response' –
Привет @MichaelStClair вы можете найти структуру оболочки ответа здесь: [Конечные точки API-схемы] (https://instagram.com/developer/endpoints/) – Wilhelm
print out '$ response [" pagination "] [" next_url "];' и посмотреть, есть ли там значение –