2013-09-03 14 views
12

Yapmak oldukça kolay, ama ne yapıyorum yanlış anlayamıyorum. Erişim için İbrahim'in OAuth'unu kullanıyorum. Ekranın adı, kullanıcı adı ve twitter ID: benim takipçisi bilgileri ile bir veritabanı inşa ediyorum. Çok özel bir şey yok.Nasıl API Limit atmadan Tüm Twitter Takipçileri elde etmek için nasıl

Twitter'ın "cursoring" sayfasını, özellikle de sözde kodumu, kodumu yapmak için atıfta bulunuyorum. her isteği ile

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) 

, son kullanıcı "sayfalarında gezinirken sağlayan bir "imleç" alır: Aşağıdaki gibi söz konusu pesudo kodunu görmek için bağlantıyı tıklayın istemeyen olanlar için, görünüşe "sonuçların Her sayfa 20'yi tutuyor ve 200 takipçiniz varsa 10 sayfadan geçmeniz gerekiyor. 900'den fazla takipçim var.

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

?> 

Yukarıdaki kod twitter takipçileri/listesini çağırır ve ilk 20 kullanıcı alır: Ben şu benzemeye güncellenmiştir. Sonra bir imleci alır ve bir sonraki gider ve tekrarlar. bu bana verir yaklaşık 80 kullanıcılarının sonra sadece, öyle görünüyor güzel: hız limiti, inmek imleç ile tekrar işlevini çağırmak için

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

    ) 

elle sonraki imleci alabilir, 15 dakika bekleyin olsun Bir sonraki 80 ürün, o anahtarı al ve tekrarla, ama tekrar tekrar arayabilecek bir betik kurmak istiyorum.

Yanlış bir şey yapıyorum, ya da oAuth adını verdiğim işleve veya bunun dışında bir yere yapıyorum. Biri bana doğru yönde işaret edebilir mi?

Teşekkür ederiz.

+0

Oranınızı sınırlamanız gerekir, 'sleep()' ile 15 dakikada 15 istekte bulunmanız gerekir. Her isteğin ardından bir dakikalığına uyuyun ya da isteğinizle patlatın ve 15 dakika kadar uyuyun. Aynı zamanda tekrar gidip gelemeyeceğinizi belirlemek için başlık bilgisi var gibi görünüyor https://dev.twitter.com/docs/rate-limiting/1.1 – cmorrissey

+0

Bu kötü bir fikir değil. Ancak birkaç saat sürer. Başka bir şey yoksa, bunu yapacağım. Teşekkürler! –

cevap

17

Bu şekilde daha hızlı, ancak bir sınırlama da endişeler var: https://dev.twitter.com/docs/api/1.1/get/followers/ids

2- döngü sayfa 5000 id ile

1- tüm takipçileri kimlikleri almak için bir talepte ... sayfalama kimlikleri ve u 15 dakikada 1500 kullanıcı nesnesi yerine 300 kullanıcı nesnesini alabilirsiniz şimdi https://dev.twitter.com/docs/api/1.1/get/users/lookup

3- onların bilgi almak için bir virgülle ayrılmış dizede her 100 id göndermek

Ayrıca, 15 listeden fazla bir takipçinin her zaman için bir istek ayarlamanız gerekir. Bu sayede takipçilerin listesi 1500

+1

Bunu yaptım, ancak https://dev.twitter.com/docs/api/1.1/get/users/show kullanmak için değiştirdim, böylece hem kullanıcı adı hem de ekran adı alabilirim. Konseptiniz harika çalıştı, ancak daha fazla veriye ihtiyacım vardı. Yaklaşımımı yaparken, Relequestual'ın dediği gibi bir döngü ve bir zamanlayıcı ayarlamak zorunda kaldım, ama sonunda işe yaradı, bu yüzden teşekkürler :) –

+1

U r welcome :) ... Ne yazık ki Twitter sınırlaması çok yüksek ve etrafta çalışmak zorundayız: D –

+0

Bir şey özlüyor muyum? Bu, adım 1'den adım 2'ye giden darboğazı değiştirmez mi? Bir seferde takipçileri 200 almak için bir çağrı var ve adım 2 her seferinde 100'dür. – pete

2

Verilen sınırlamaların herhangi bir yolu olduğunu sanmıyorum. Tweetbot'un bile bu sınırlama vardır, çünkü bir sınırlama twitter empoze edilir. Mevcut durumun veritabanında bir not oluşturabilir ve her 15 dakikada bir tekrar tekrar çalışacak bir cron işi ayarlayabilirsiniz. Zaman alacak, ancak bittiğinde e-posta yoluyla size bildirebilir. Sosyalbro gibi hizmetler böyle yapar. Bu sonuçları tablonuzda önbelleğe alırdınız.

İlgili konular