我正在研究一个简单的小代码,它基本上会对一些推文进行过滤。问题是我正在达到Twitter API的请求限制,我想知道是否有解决方法,或者我想做什么不能完成。
首先,我输入一个推特用户名来检索该用户关注的人的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人则可以使用。但是,如果他跟随,那么说600个,那将是600个请求(对于用户名,描述和个人资料图片)超过限制的Twitter API。
有没有办法解决这个问题,这是无法做到的?
谢谢!
答案 0 :(得分:0)
您可以而且应该一次向100个userIds请求users/lookup
API endPoint,而不是每个Twitter ID请求一个请求。比照https://dev.twitter.com/docs/api/1.1/get/users/lookup
您必须通过递归函数替换forEach循环(foreach ($following as $url)
)。
在功能结束时,检查再次呼叫之前剩余的点击次数(参见this link,了解如何知道时间提醒,直到您获得速率限制)。
如果没有击中,请在再次呼叫该功能前15分钟睡觉,否则再次拨打电话。
有很多关于如何执行此操作的信息,请使用Google并搜索现有的stackOverflow问题。