0

我正在编写一个小而简单的代码,它基本上可以过滤一些推文。问题是我达到了 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 次请求(用于用户名、描述和个人资料图片)。

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

谢谢!

4

1 回答 1

0

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

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

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

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

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

于 2014-01-28T23:56:48.883 回答