2012-01-05 290 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的!