【问题标题】:Rate limit. Twitter API速率限制。推特 API
【发布时间】:2013-04-23 16:45:32
【问题描述】:

我正在编写一个小而简单的代码,它基本上可以过滤一些推文。问题是我达到了 Twitter API 的请求限制,我想知道是否有解决方法,或者我想做的事情是否无法完成。

首先,我输入一个 twitter 用户名来检索该用户关注的人的 ID。

$user_id = $_GET["username"]; 
$url_post = "http://api.twitter.com/1/friends/ids.json?cursor=-1&screen_name=" . urlencode($user_id);
$following = file_get_contents($url_post, true);
$json = json_decode($following);

$ids = $json->ids;

Twitter API 以 ID 列表响应。

问题来了。下一步是请求找出每个 ID 的用户名、头像和描述。

$following = array();
foreach ($ids as $value)
{
$build_url = 'http://api.twitter.com/1/users/lookup.json?user_id=' . $value . '';
$following[] = $build_url;
}


foreach ($following as $url) 
{
$data_names = file_get_contents($url, true); //getting the file content
$json_names = json_decode($data_names);

foreach ($json_names as $tweet) {

$name = $tweet->name;
$description = $tweet->description;

echo '<p>'; 
echo $name . '<br>';
echo $description;
echo '</p>';
}
}

如果用户关注了 50 个人,它就可以工作。但是,如果他跟随,假设是 60000 次,那将是超过限制的 Twitter API 的 600000 次请求(用于用户名、描述和个人资料图片)。

有什么办法可以解决这个问题吗?

谢谢!

【问题讨论】:

  • 您可以将响应缓存几分钟/几小时,并且仅在缓存无效时才发出请求。

标签: php api twitter foreach


【解决方案1】:

您可以并且应该一次请求 users/lookup API 端点 100 个用户 ID,而不是每个 Twitter ID 执行一个请求。参看。 https://dev.twitter.com/docs/api/1.1/get/users/lookup

您必须用递归函数替换您的 forEach 循环 (foreach ($following as $url))。

在函数结束时,在再次调用之前检查剩余的命中数(参见this link,了解如何知道在您获得速率限制之前的时间)。

如果没有命中,则在再次调用该函数之前休眠15分钟,否则再次调用。

有很多关于如何执行此操作、使用 Google 和搜索现有 stackOverflow 问题的信息。

【讨论】:

  • 说结果显示了 5000 个 id...然后你有大约 50 个这样的查询来通过 5000 个结果。很快,速率限制就会生效——对吗?我想知道的不是 twitter api 的观点,而是 PHP 脚本的结构应该是什么样的;你有一个例子或推荐阅读吗?
猜你喜欢
  • 2015-03-24
  • 2013-01-07
  • 2020-11-04
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多