Ken*_*ong 13 php twitter oauth twitter-oauth
我想这很容易做到,但我无法弄清楚我做错了什么.我正在使用亚伯拉罕的OAuth获取访问权限.我正在使用我的关注者信息构建一个数据库:屏幕名称,用户名和推特ID.没什么特别的.
我引用了Twitter的" 光标 "页面,特别是伪代码,来制作我的代码.对于那些不想单击链接以查看所述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 )
Run Code Online (Sandbox Code Playgroud)
对于每个请求,最终用户都会获得一个"光标",允许他们浏览结果的"页面".每页有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>';
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码调用twitter粉丝/列表并获得前20个用户.然后它获得一个光标并转到下一个,然后重复.只有,在大约80个用户之后,它给了我可爱的:
[errors] => Array
(
[0] => stdClass Object
(
[message] => Rate limit exceeded
[code] => 88
)
)
Run Code Online (Sandbox Code Playgroud)
我可以手动获取下一个光标,等待15分钟以使速率限制下降,使用光标再次调用该函数,获取接下来的80个项目,然后获取该密钥并重复,但我想设置一个可以的脚本一遍又一遍地称呼它.
我觉得我做错了,无论是我的功能,我称之为oAuth,还是在某个地方之外.有人能指出我正确的方向吗?
谢谢.
Isl*_*med 18
这种方式更快,但也有一个限制:
1-请求获取所有关注者ID ...在页面中使用5000 id进行分页 https://dev.twitter.com/docs/api/1.1/get/followers/ids
在ids上进行2循环,并以逗号分隔的字符串发送每个100个ID以获取其信息 https://dev.twitter.com/docs/api/1.1/get/users/lookup
3-现在你可以每15分钟获得1500个用户对象而不是300个用户对象
但是,如果关注者列表超过1500,您还需要每15个请求设置一个计时器