Я думаю, это довольно легко сделать, но я не могу понять, что я делаю неправильно. Я использую Abraham OAuth для доступа. Я создаю базу данных с информацией о моем подписчике: имя экрана, имя пользователя и идентификатор твиттера. Ничего особенного.
Я сделал ссылку на страницу 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>';
?>
Вышеупомянутый код вызывает последователей/список твиттеров и получает первых 20 пользователей. Затем он получает курсор и переходит к следующему, и повторяет. Только, кажется, примерно после 80 пользователей это дает мне прекрасный:
[errors] => Array
(
[0] => stdClass Object
(
[message] => Rate limit exceeded
[code] => 88
)
)
Я мог бы вручную получить следующий курсор, подождать 15 минут, чтобы предел скорости снизился, снова вызвать функцию с помощью курсора, получить следующие 80 элементов, затем получить этот ключ и повторить, но я хочу настроить script, который может вызывать его снова и снова.
Я чувствую, что делаю что-то неправильно, либо с моей функцией, где я называю oAuth, или где-то вне ее. Может ли кто-нибудь указать мне в правильном направлении?
Спасибо.