Comment obtenir tous les abonnés Twitter sans atteindre la limite API

J'imagine que c'est assez facile à faire, mais je ne peux pas comprendre ce que je fais mal. Je suis à l'aide d'Abraham OAuth pour y avoir accès. Je suis en train de construire une base de données avec mon adepte de l'information: l'écran, le nom d'utilisateur et ID twitter. Rien de trop spécial.

Que j'ai référencé de Twitter "cursoring" de la page, en particulier le code de pseudo, pour rendre mon code. Pour ceux qui ne veulent pas cliquer sur le lien pour voir dit pesudo code, il ressemble à la suivante:

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 )

À chaque requête, l'utilisateur final bénéficie d'un "curseur" qui leur permet de naviguer à travers les pages de résultats. Chaque page dispose de 20, et si vous avez 200 followers que vous avez à passer par 10 pages. J'ai plus de 900 followers. Je l'ai modifié pour ressembler à la suivante:

 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>';

?>

Le code ci-dessus appelle les adeptes de twitter/liste et devient la première de 20 utilisateurs. Elle obtient ensuite un curseur et passe à la suivante, et se répète. Seulement, il semble qu'après environ 80 utilisateurs, il me donne l'agréable:

[errors] => Array
    (
        [0] => stdClass Object
            (
                [message] => Rate limit exceeded
                [code] => 88
            )

    )

J'ai pu récupérer manuellement la prochaine curseur, attendre 15 minutes pour que la limite de taux à la baisse, appelez la fonction avec le curseur, la prochaine de 80, puis obtenir cette clé, et le répéter, mais je veux mettre en place un script que l'on peut appeler encore et encore.

Je sens que je suis en train de faire quelque chose de mal, que ce soit avec ma fonction où j'appelle oAuth, ou à l'extérieur de quelque part. Quelqu'un peut-il me diriger dans la bonne direction?

Merci.

source d'informationauteur Kenton de Jong