Я предполагаю, что это довольно легко сделать, но я не могу понять, что я делаю неправильно. Я использую OAuth Авраама, чтобы получить доступ. Я создаю базу данных с информацией моего последователя: имя экрана, имя пользователя и идентификатор твиттера. Ничего особенного.Как получить всех подписчиков Twitter без ограничения API-интерфейса
Я ссылался на страницу «cursoring» 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)
С каждым запросом, конечный пользователь получает «курсор», который позволяет им перемещаться по страницам» "результатов. Каждая страница содержит 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 пунктов, затем получите этот ключ и повторите, но я хочу настроить скрипт, который может называть его снова и снова.
Я чувствую, что делаю что-то не так, либо с моей функцией, где я называю oAuth, или вне ее где-то. Может кто-нибудь указать мне в правильном направлении?
спасибо.
Вам нужно будет ограничить свою ставку, используя 'sleep()' у вас должно быть 15 запросов за 15 минут, чтобы вы могли спать в течение минуты после каждого запроса или взрывать ваши просьбы, а затем спать в течение 15 минут. Также похоже, что информация заголовка отправлена для определения, когда вы можете снова вернуться https://dev.twitter.com/docs/rate-limiting/1.1 – cmorrissey
Это неплохая идея. Это займет несколько часов. Если ничего другого, я сделаю это. Благодаря! –