php – 如何获取所有Twitter的关注者,而不会触发API限制

前端之家收集整理的这篇文章主要介绍了php – 如何获取所有Twitter的关注者,而不会触发API限制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想这很容易做到,但我无法弄明白我在做错什么.我正在使用亚伯拉罕的OAuth来访问.我正在使用我的追随者的信息构建数据库:屏幕名称,用户名和twitter ID.没什么太特别

我引用了Twitter的“cursoring页面,特别是伪代码,以使我的代码.对于那些不想点击链接看到所述pesudo代码的人,它看起来像下面这样:

cursor = -1

api_path = "https://api.twitter.com/1.1/endpoint.json?screen_name=targetUser"

do {

    url_with_cursor = api_path + "&cursor=" + cursor      

    response_dictionary = perform_http_get_request_for_url( url_with_cursor )

    cursor = response_dictionary[ 'next_cursor' ]

}

while ( cursor != 0 )

对于每个请求,最终用户获得一个“光标”,允许他们通过结果的“页面”导航.每页可容纳20位,如果您有200位追踪者,则必须经过10页.我有超过900个追随者.我将其修改为如下所示:

include('config.PHP');  //db connection
 include('twitter_oauth.PHP'); //oauth connection

 $followers = "";

$cursor = -1;
echo '<pre>';   
do {

    $consumerKey = 'xxx';
    $consumerSecret = 'xxx';
    $OAuthToken = 'xxx';
    $OAuthSecret = 'xxx';

    $tweet = new TwitterOAuth($consumerKey,$consumerSecret,$OAuthToken,$OAuthSecret);

    $followers = $tweet->get('followers/list',array('screen_name' => 'my_screen_name','cursor' => $cursor));

    print_r($followers);

    if (isset($followers->error)) {
        echo $followers->next_cursor_str;
        break;
    } 

    foreach($followers->users as $users) {

        $followersQ = MysqL_query("SELECT * FROM followers WHERE tw_id = '".$users->id."'") or die(MysqL_error());
        $num_rows = MysqL_num_rows($followersQ);

        if ($num_rows == 0) {
            $followersQ2 = "INSERT INTO followers 
                                        (screen_name,name,tw_id)
                                        VALUES
                                        ('".$users->screen_name."','".$users->name."','".$users->id."')";
            $followersR = MysqL_query($followersQ2) or die(MysqL_error());
            echo 'done one set<br>';
        }

    }


    $cursor = $followers->next_cursor_str;

}

while ( $cursor != 0 );
echo '</pre>';

?>

上面的代码调用了Twitter的关注者/列表,并获得了前20个用户.然后它得到一个光标并转到下一个,并重复.只有,约80个用户似乎给了我可爱的感觉:

[errors] => Array
    (
        [0] => stdClass Object
            (
                [message] => Rate limit exceeded
                [code] => 88
            )

    )

我可以手动获取下一个游标,等待15分钟的速率限制下降,再次使用光标调用功能,获取下一个80个项目,然后获取该键并重复,但是我想设置一个脚本,可以称它一遍又一遍.

我觉得我做错了,无论是我的函数,我称之为oAuth,还是在某个地方.有人可以指出我正确的方向吗?

谢谢.

这种方式更快,但也有一个限制:

1-提出请求以获得所有的跟踪者ID =页面中的5000个id
https://dev.twitter.com/docs/api/1.1/get/followers/ids

2-循环ids,并以逗号分隔的字符串发送每个100个id以获取他们的信息
https://dev.twitter.com/docs/api/1.1/get/users/lookup

现在你可以每15分钟获得1500个用户对象,而不是300个用户对象

但是,如果关注者列表超过1500,您还需要每15个请求设置一个计时器

猜你在找的PHP相关文章