Как я могу следить за пользователями с помощью API instagram без проблемы с лимитной ставкой?
Я хочу следить за списком идентификаторов пользователей в instagram. Я составил список, и когда я пытаюсь отправить следующий запрос с помощью api, я получаю эту ошибку: Достигнут лимит запросов клиента (код: 400)
В документации разработчика говорится: "Вы ограничены 5000 запросами в час на access_token или client_id в целом"
.Но когда я получаю эту ошибку, мой код едва ли соответствует 50 идентификаторам пользователей!
И еще одно, когда я получил эту ошибку, я попытался следить за людьми в приложении instagram прямой (не используя api), и не было никаких проблем!
Это часть моего кода, которая выдает эту ошибку:
foreach ($usersArr as $user) {
$i++;
$url = 'https://api.instagram.com/v1/users/'.$user->id.'/relationship?access_token='. $accessToken;
$data = 'action=follow';
$resultObj = json_decode(sendPostData($url, $data));
$responseCode = $resultObj->meta->code;
$errorMsg = $resultObj->meta->error_message;
if ($responseCode != 200)
echo "\"" . $errorMsg . "\" AT " . date('Y-m-d H:i:s') . "\n\n";
while ($responseCode != 200){
sleep(60);
$resultObj = json_decode(sendPostData($url, $data));
$responseCode = $resultObj->meta->code;
if ($responseCode != 200) {
$errorMsg = $resultObj->meta->error_message;
echo "STILL \"" . $errorMsg . "\" AT " . date('Y-m-d H:i:s') . "\n\n";
}
elseif($responseCode == 200){
echo "Limit Finished At: " . date('Y-m-d H:i:s') . "\n\n";
break;
}
}
echo "User NO. " .$i . " has been followed!" . "\n\n";
}
Большое спасибо:)
2 answers
Обратите внимание, что API жалуется на запросы , а не следует. Вы можете следить за 50 пользователями, но вы сделали запросы API, которые превышают 5000. С вашим текущим кодом вам потребуется всего 100 обновлений страниц, чтобы достичь этого предела. Может показаться, что много обновлений, но если вы отлаживаете/разрабатываете код, то вполне вероятно предположить, что вы можете с относительной легкостью превысить порог обновления 100.
Чтобы устранить эту проблему, если вы все еще работаете/отлаживаете затем этот код уменьшает количество подписок с 50 до 1 или 2. Как только ваш код заработает, восстановите предыдущее количество подписок. Я бы рекомендовал вам также кэшировать возвращаемые объекты в течение 5 или 10 минут. Таким образом, вам не нужно будет беспокоиться о превышении ограничений API.
Мой опыт работы с конечной точкой связи API заключается в том, что вы ограничены примерно 160 запросами в час. Похоже, что это разделяется со всеми действиями (следовать/отменять/блокировать/разблокировать/одобрить/запретить). Я не смог найти ничего, что позволило бы вам заранее определить, сколько запросов вы оставили, прежде чем превысите свой лимит (в отличие от заголовка X-Ratelimit-Remaining для общего лимита запросов), и я заметил, что любая попытка использовать конечную точку добавляется к вашему количеству запросов, независимо от того, будет ли он успешным или нет.
Поскольку мое конкретное приложение обрабатывает одновременно несколько пользователей, я обрабатываю небольшие фрагменты (около 50 запросов), и когда я заканчиваю фрагмент или достигаю предела скорости в пределах фрагмента, я перехожу к другому пользователю на некоторое время (обычно около 10-15 минут), прежде чем вернуться.
Я полагаю, что ограничение API составляет для каждого приложения/клиентского ключа, поэтому вы можете следить за пользователями в приложении instagram, несмотря на то, что достигли вашего предел.