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