我想这很容易做到,但我无法弄明白我在做错什么.我正在使用亚伯拉罕的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个请求设置一个计时器