【问题标题】:How can I follow users using the instagram API without the limit rate issue?如何在没有限制率问题的情况下使用 instagram API 关注用户?
【发布时间】:2014-01-27 23:18:25
【问题描述】:

我想关注 instagram 中的用户 ID 列表。 我列出了列表,当我尝试使用 api 发送关注请求时,我收到了这个错误: 已达到客户端请求限制(代码:400)

开发者文档说: “每个 access_token 或 client_id 每小时限制为 5000 个请求。”

但是当我收到这个错误时,我的代码几乎没有遵循 50 个用户 ID!

还有一件事,当我收到此错误时,我尝试直接在 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";
}

非常感谢:)

【问题讨论】:

  • 尽管没有达到 API 限制,但我遇到了同样的错误。似乎新应用可能会受到处罚,并且不允许关注用户。
  • 您是否拥有多个应用程序,请尝试使用其他应用程序的令牌、密钥,看看您是否有同样的问题。
  • @MetablocksCorp 不,我在 php 中使用带有 CURL 函数的 API。

标签: php api instagram


【解决方案1】:

我对 API 的关系端点的经验是,您的请求限制为每小时大约 160 个请求。这似乎与所有操作共享(关注/取消关注/阻止/取消阻止/批准/拒绝)。我找不到任何东西可以让您提前确定在超出限制之前还剩下多少请求(与整体请求限制中的 X-Ratelimit-Remaining 标头不同),我注意到任何尝试无论是否成功,都将使用端点添加到您的请求计数中。

因为我的特定应用程序正在同时为多个人处理,所以我以小块(大约 50 个请求)进行处理,当我完成一个块时,或者如果我在该块中达到速率限制,我会转移到另一个用户在回来之前(通常大约 10-15 分钟)。

我认为 API 限制是每个 appid/clientkey,这就是为什么尽管达到了限制,您仍可以在 Instagram 应用上关注用户。

【讨论】:

    【解决方案2】:

    注意,API 抱怨的是请求,而不是跟随。您可能关注了 50 个用户,但您发出的 API 请求超过了 5000。使用您当前的代码,您只需刷新 100 次页面即可达到该限制。可能听起来像很多刷新,但如果您正在调试/开发代码,那么假设您可以相对轻松地超过 100 次刷新阈值是合理的。

    为缓解此问题,如果您仍在工作/调试此代码,请将关注的数量从 50 减少到 1 或 2。一旦您的代码正常工作,然后恢复之前的关注数量。我建议您也将返回的对象缓存 5 或 10 分钟。这样您就不必担心超出 API 限制。

    【讨论】:

    • 你是对的,所以现在如果可能的话,我想知道我每小时可以关注多少人,这样我就可以放一个 sleep();在我的 php 代码中运行,直到限制重置。我在文档中进行了很多搜索,以了解我每小时可以拥有多少次关注,但没有运气!另外,如果有每天的关注限制,我想知道:) 从逻辑上讲,他们不应该让用户过度使用 API,他们应该为关注设置“每小时”和“每天”限制......
    • 你不需要使用 sleep(),只需发出请求并缓存它。将缓存设置为 5 分钟后过期,一旦过期,发出新请求并更新缓存。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多