【发布时间】:2013-09-07 03:46:46
【问题描述】:
我想这很容易做到,但我不知道我做错了什么。我正在使用 Abraham 的 OAuth 来获得访问权限。我正在使用我的关注者信息构建一个数据库:屏幕名称、用户名和 Twitter ID。没什么特别的。
我参考了 Twitter 的“cursoring”页面,尤其是伪代码来编写我的代码。对于那些不想点击链接查看所述伪代码的人来说,它看起来像下面这样:
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 的函数,要么是它之外的某个地方。有人能指出我正确的方向吗?
谢谢。
【问题讨论】:
-
您将需要限制您的速率,使用
sleep(),您应该每 15 分钟有 15 个请求,这样您就可以在每个请求后休眠一分钟,或者先处理您的请求,然后再休眠 15 分钟.看起来还发送了标题信息以确定您何时可以再次访问dev.twitter.com/docs/rate-limiting/1.1 -
这不是一个坏主意。不过这需要几个小时。如果没有别的,我会这样做。谢谢!
标签: php twitter oauth twitter-oauth