2012-05-26 36 views
2

我做了一個使用Streaming API的Twitter抓取工具。它在perl中使用Net:Twitter:Stream進行編程。我認爲它正在檢索很少的推文。我昨天離開它跟蹤了電視連續劇的推文,並且我收到了30860條推文。我認爲這是一個低價值。 您對此有何看法?有沒有其他的Perl庫可以使用? 我會把我的部分代碼放在這裏,看看是否有什麼問題。如何改進我的Twitter流式抓取工具?

謝謝大家

蒂亞戈

use JSON; 
use Solr; 
use Net::Twitter::Stream; 
sub coletar{ 
    Net::Twitter::Stream->new (user => $username, pass => $password, 
        callback => \&got_tweet, 
        connection_closed_cb => \&connection_closed, 
        track => $track); #$track has my string search; 
    sub connection_closed { 
     if ($count==0){ 
      sleep 10; 
     } 
     elsif($count==1){ 
      sleep 20; 
     } 
     else{ 
      sleep 240; 
     } 
     $count++; 
     warn "Connection to Twitter closed"; 
     coletar();    #Recomeçando o download de tweets. 
    } 
    sub got_tweet { 
     $cont=0; 
     my ($tweet, $json) = @_; 
     # Here I save the tweet in my NoSQL database... 
    } 
} 
coletar; 
+0

您的腳本不包含任何執行代碼,只包含子例程。你的子程序也是嵌套的,這不是一個好主意,並且可能不會做你認爲它的作用。除非你知道他們在做什麼,你應該避免使用原型,例如'sub coletar {...}',而不是'sub coletar(){...}'。你應該編輯你的問題,幷包括實際上做了些什麼的代碼。 – TLP

+0

對不起,我忘了調用這個函數,但是我在代碼的最後做了這個。我將coletar(){..}更改爲coletar {...},我沒有看到任何差異。我會更新這個問題。但是,它的工作方式是一樣的。自從昨天晚上到現在,它共收集了80319條推文,我認爲這是一個低價值。 – Thiago

+0

你有沒有嘗試過這個模塊:AnyEvent :: Twitter :: Stream?我在Perl Mova中看到他們在行動。 –

回答

2

有幾件事情要記住有關Twitter的數據流。首先,如果你的代碼是一個瓶頸,傳入的推文隊列將溢出,你的連接將會消失。所以它可能不是你的代碼。

Twitter正在限制他們向「普通」消費者發送的Tweets數量,並對全部流進行收費。所以你可能會遇到費率限制,但很難確定。

測試您獲得的推文百分比的一種方法是設置第二個帳戶,該帳戶隨機發送應該在您的過濾器中捕獲的推文。然後計算在您的刮板中發現的這些推文的百分比。如果不是100%,您可能會受到限制。

+0

好吧。我會嘗試做另一個帳戶並測試我的抓取工具。但是如果我受到限制,有什麼我可以做的嗎?我閱讀了有關OAuth身份驗證的一些信息,但我不完全知道它是什麼。 – Thiago