Twitter API:获取粉丝数+99

7

如果我调用用户的关注者(statuses/followers),使用Twitter API(和OAuth),我只会返回99个结果。

是否有一种方法可以返回前99个,然后再从第100个关注者开始调用,以此类推循环调用,直到返回所有关注者为止?

还是直接返回所有关注者?

7个回答

4
你需要按照API文档中描述的指定光标参数。例如,指定cursor=-1来请求第一页,然后使用第一个响应中返回的next_cursor值:
  http://twitter.com/statuses/followers/barackobama.xml?cursor=-1
  http://twitter.com/statuses/followers/barackobama.xml?cursor=1300794057949944903

当您尝试访问这些URL时,会收到“未被授权使用此端点”的提示。我认为他们可能已经更改了他们的API? - Ben G

3
<?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  }  ?>

1

确保你使用正确的调用。 followers/ids 每次会给你5000个id(但这只是一个id列表)。这个调用也使用游标让你浏览用户页面。当你全部获取完毕时,你会收到一个零。


1

0
$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);

1
你能否在回答中加入一点解释呢?对于他如何将其应用到代码中的额外信息也会很有帮助。 - Mark Garcia

0
Twitter每小时只允许一定数量的API请求,我认为每分钟也是如此。一次最多只能检索99个请求。

1
每小时总共是150美元。因此,他可以让100个人拨打150次电话(或者5000个人拨打150次电话,这取决于他使用的呼叫方式)。这个数字是针对不需要授权的通话进行计算的。需要授权的通话会单独计算。您可以为您的应用程序请求白名单,但即使如此,也不足以随意访问API,因此,如果您期望高容量服务,则需要进行一些缓存。 - Nosredna
但你说得很对。有许多帐户拥有超过15,000个关注者。如果与他们互动,你会一次性用完所有的API请求。 - Nosredna
1
它们是基于每个OAuth用户的 - 如果user_1达到了他们的限制..他们会收到错误提示,但user_2仍然可以正常使用。 - tarnfeld

0

虽然我很久以前就提出了这个问题,但是最近我回来做了一些非常相似的东西(+新的编程技能)。

我注意到 Twitter API 有一个方法可以在一次请求中获取用户所有的关注者(或关注)用户ID。我发现最好的方法是将 ID 拆分成每 100 个为一组,并只取前 30 组(因为我不想使用所有用户的 API 请求小时数 - 他们可能真正想要发推文!)。然后有一种方法可以让你从当前验证的用户视角获取多达 100 个用户的用户信息,所以我只需循环一下(之间稍作延迟),然后你就有了 30,000 名 Twitter 关注者!

我建议在队列系统中异步执行此操作,因为如果您在用户请求页面时立即执行此操作,它可能非常慢,而且您可能容易遇到 HTTP 超时。另外,请像疯狂缓存一样缓存它们!

很抱歉我没有发布任何代码,但希望这个思考过程能帮助某个人 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接