我被给了一个简单的任务,涉及获得一些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