2012-01-05 293 views
1

我被給了一個簡單的任務,涉及獲得一些Twitter帳戶的追隨者數。可能會有1000個twitter用戶名,我創建的應用程序應該讓每個用戶的跟隨者統計並總結出來。Twitter的速率限制

看起來像一個簡單的任務,所以我所做的就是使用Twitter API調用(來自C#客戶端的)獲取我需要的信息給每個用戶。由於信息後,我是沒有什麼特別的只是一些公開的數據,我使用未經認證的calls.Like這樣的:

string target = "http:twitter.com/users/" + userName + ".xml"; 
Console.WriteLine("UserName: " + userName); 

WebClient client = new WebClient(); 

Stream stream = client.OpenRead(target); StreamReader reader = new 
StreamReader(stream); 
XmlTextReader xml_read = new XmlTextReader(stream); 

while (xml_read.Read()) { 
    xml_read.MoveToElement(); 
    if (xml_read.Name == "name") {   
     Console.WriteLine("Name: " + xml_read.ReadInnerXml().ToString()); 
    } 

    if (xml_read.Name == "followers_count"){ 
     Console.WriteLine("Followers: " + 
             xml_read.ReadInnerXml().ToString());   
      Console.WriteLine(); 
     } 
} 

這個工程很大(在速度和sufficing目的而言),但是它與速度問題限制。即我每小時不能做超過100次左右的請求......所以對於1000位用戶,我需要10個小時來完成這個簡單的任務! ..

我試着走了不同的道路。由於我所需要的信息都是公開的,我決定下載每個Twitter帳戶的html頁面,以獲得追隨者(和真實姓名)。像這樣:

WebRequest myWebRequest = WebRequest.Create("http://twitter.com/" + userName); 
WebResponse myWebResponse = myWebRequest.GetResponse(); 
Stream ReceiveStream = myWebResponse.GetResponseStream(); 
Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 
StreamReader readStream = new StreamReader(ReceiveStream, encode); 
string strResponse = readStream.ReadToEnd(); 

然後使用簡單的字符串解析來獲得追隨者的數量和真實姓名。

該解決方案是有效的。但是下載整個HTML文件(大小爲300KB +)是不是一個真正的聰明的方式來做到這一點。加上大約需要2小時才能完成任務。

我是什麼要求?

我希望/相信有一個更聰明,更有效的方式,從Twitter獲取公共信息。

+0

你是怎麼弄到的Twitter賬戶爲您的應用程序,你首先需要的數據呢?如果你有賬戶,他們是否允許你的應用訪問他們的賬戶?我瞭解你想要的信息是公開的,我試圖說明的一點是,如果你的賬戶有一個令牌,你可以循環訪問令牌並分別檢索每個賬戶的信息,從而避免任何速率限制,因爲它是每個帳戶受到限制的請求數量。部分原因是他們有費率限制,因此人們不能在未經批准的情況下使用Twitter數據。 – phreak3eb 2012-01-05 14:56:01

回答

2

也許你可以使用此解決方案:https://dev.twitter.com/docs/api/1/get/users/lookup

它可以讓你請求的數據多達100個用戶名的能力(用逗號隔開)這樣的: https://api.twitter.com/1/users/lookup.json?screen_name=bloodyairtimer,geertvdc

如果你想在xml或json中得到結果,你可以自己決定。也許json的大小會比xml小。

+0

謝謝你! ..這正是我需要的。 (標記爲答案)\。 – aamran 2012-01-08 10:07:15

+0

很高興聽到它幫助你。 Twitter的API有幾條道路來獲得相同的結果。 – ChristiaanV 2012-01-09 07:57:23

1

我有同樣的問題。我通過開發人員論壇詢問了Twitter支持,但我沒有收到有用的回覆。每種API方法都有一個速率限制,一般來說,如果你經過身份驗證,你可以有一個更大的方法(公共方法爲150,驗證爲350),但它不是一個很好的價值。

如果你可以使用一個以上的IP地址,你可以有不同的請求數,但如果你調用的API與身份驗證,因爲在這種情況下,計數不用於IP但它的用戶是更好。

Twitter的速率限制政策在這裏定義: https://dev.twitter.com/docs/rate-limiting/faq

+0

謝謝Max。我知道這兩種不同的類型,但對於我的用例來說這兩種類型都不夠用。我希望有一個無限制的解決方案,因爲我試圖獲得的信息可以通過Twitter網站公開訪問而不受限速。 – aamran 2012-01-05 09:49:58

0

你也可以使用一個服務像GNIP

他們已經儲存了所有的Twitter的!