Ich stelle mir vor, es ist ziemlich einfach zu tun, aber ich kann nicht herausfinden, was ich falsch mache. Ich benutze Abrahams OAuth, um Zugang zu erhalten. Ich baue eine Datenbank mit den Informationen meines Nachfolgers: Name des Bildschirms, Benutzername und Twitter-ID. Nichts Besonderes.Wie bekomme ich alle Twitter-Follower, ohne API-Limit zu treffen
Ich referenzierte Twitter "cursoring" Seite, vor allem der Pseudo-Code, um meinen Code zu machen. Für diejenigen, die nicht wollen, auf den Link klicken, um den pesudo Code zu sehen, sieht es wie folgt aus:
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)
Bei jeder Anforderung, der Endbenutzer einen „Cursor“ bekommt, die sie durch „Seiten navigieren kann "von Ergebnissen. Jede Seite enthält 20, und wenn Sie 200 Follower haben, müssen Sie 10 Seiten durchgehen. Ich habe über 900 Anhänger. Ich änderte es wie folgt aussehen:
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>';
?>
Der obige Code ruft die Twitter-Follower/Liste und bekommt die ersten 20 Benutzer. Es erhält dann einen Cursor und geht zum nächsten und wiederholt. Nur scheint es nach etwa 80 Benutzern es mir die schönen gibt:
[errors] => Array
(
[0] => stdClass Object
(
[message] => Rate limit exceeded
[code] => 88
)
)
ich manuell den nächsten Cursor bekommen konnte, nur 15 Minuten warten, bis die Geschwindigkeitsgrenze mit dem Cursor die Funktion wieder zu gehen, ruft, erhält die nächsten 80 Elemente, dann erhalten Sie diese Taste und wiederholen, aber ich möchte ein Skript einrichten, die es immer wieder aufrufen können.
Ich fühle, dass ich etwas falsch mache, entweder mit meiner Funktion, wo ich oAuth anrufe, oder irgendwo außerhalb davon. Kann mir jemand in die richtige Richtung zeigen?
Vielen Dank.
Sie müssen Ihre Rate zu begrenzen, mit 'sleep()' sollten Sie 15 Anfragen pro 15 Minuten haben, so können Sie Schlafe für eine Minute nach jeder Anfrage, oder sprengen Sie Ihre Anfragen und schlafen Sie dann für 15 Minuten. Es sieht auch so aus, als ob Header-Informationen gesendet werden, um festzustellen, wann Sie wieder gehen können https://dev.twitter.com/docs/rate-limiting/1.1 – cmorrissey
Das ist keine schlechte Idee. Es würde jedoch ein paar Stunden dauern. Wenn nichts anderes, werde ich das tun. Vielen Dank! –