如果我调用用户的关注者(statuses/followers),使用Twitter API(和OAuth),我只会返回99个结果。
是否有一种方法可以返回前99个,然后再从第100个关注者开始调用,以此类推循环调用,直到返回所有关注者为止?
还是直接返回所有关注者?
http://twitter.com/statuses/followers/barackobama.xml?cursor=-1
http://twitter.com/statuses/followers/barackobama.xml?cursor=1300794057949944903
<?php
$trends_url = "http://api.twitter.com/1/statuses/followers/fawadghafoor.json";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $trends_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curlout = curl_exec($ch);
curl_close($ch);
$response = json_decode($curlout, true);
foreach($response as $friends){
$thumb = $friends['profile_image_url'];
$url = $friends['screen_name'];
$name = $friends['name'];
?>
<a title="<?php echo $name;?>" href="http://www.twitter.com/<?php echo $url;?>"><img class="photo-img" src="<?php echo $thumb?>" border="0" alt="" width="40" /></a>
<?php } ?>
确保你使用正确的调用。 followers/ids
每次会给你5000个id(但这只是一个id列表)。这个调用也使用游标让你浏览用户页面。当你全部获取完毕时,你会收到一个零。
$cursor = -1;
$account_from = 'twitter_account';
do
{
$json = file_get_contents('http://api.twitter.com/1/statuses/followers/' . $account_from .'json?cursor=' . $cursor);
$accounts = json_decode($json);
foreach ($accounts->users as $account)
{
array(
':twitter_id' => $account->id_str,
':account' => $account->screen_name,
':description' => $account->description,
);
}
$cursor = $accounts->next_cursor;
}
while ($cursor > 0);
虽然我很久以前就提出了这个问题,但是最近我回来做了一些非常相似的东西(+新的编程技能)。
我注意到 Twitter API 有一个方法可以在一次请求中获取用户所有的关注者(或关注)用户ID。我发现最好的方法是将 ID 拆分成每 100 个为一组,并只取前 30 组(因为我不想使用所有用户的 API 请求小时数 - 他们可能真正想要发推文!)。然后有一种方法可以让你从当前验证的用户视角获取多达 100 个用户的用户信息,所以我只需循环一下(之间稍作延迟),然后你就有了 30,000 名 Twitter 关注者!
我建议在队列系统中异步执行此操作,因为如果您在用户请求页面时立即执行此操作,它可能非常慢,而且您可能容易遇到 HTTP 超时。另外,请像疯狂缓存一样缓存它们!
很抱歉我没有发布任何代码,但希望这个思考过程能帮助某个人 :)