Twitter的速率限制
我被给了一个简单的任务,涉及获得一些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获取公共信息。
也许你可以使用此解决方案: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小。
谢谢你! ..这正是我需要的。 (标记为答案)\。 – aamran 2012-01-08 10:07:15
很高兴听到它帮助你。 Twitter的API有几条道路来获得相同的结果。 – ChristiaanV 2012-01-09 07:57:23
我有同样的问题。我通过开发人员论坛询问了Twitter支持,但我没有收到有用的回复。每种API方法都有一个速率限制,一般来说,如果你经过身份验证,你可以有一个更大的方法(公共方法为150,验证为350),但它不是一个很好的价值。
如果你可以使用一个以上的IP地址,你可以有不同的请求数,但如果你调用的API与身份验证,因为在这种情况下,计数不用于IP但它的用户是更好。
Twitter的速率限制政策在这里定义: https://dev.twitter.com/docs/rate-limiting/faq
谢谢Max。我知道这两种不同的类型,但对于我的用例来说这两种类型都不够用。我希望有一个无限制的解决方案,因为我试图获得的信息可以通过Twitter网站公开访问而不受限速。 – aamran 2012-01-05 09:49:58
你也可以使用一个服务像GNIP
他们已经储存了所有的Twitter的!
你是怎么弄到的Twitter账户为您的应用程序,你首先需要的数据呢?如果你有账户,他们是否允许你的应用访问他们的账户?我了解你想要的信息是公开的,我试图说明的一点是,如果你的账户有一个令牌,你可以循环访问令牌并分别检索每个账户的信息,从而避免任何速率限制,因为它是每个帐户受到限制的请求数量。部分原因是他们有费率限制,因此人们不能在未经批准的情况下使用Twitter数据。 – phreak3eb 2012-01-05 14:56:01