我被赋予了一个简单的任务,那就是让关注者清点一些twitter账户。我正在创建的应用程序可能有1000个twitter用户名,用于计算每个用户的关注者数量并对其进行汇总。
这似乎是一个简单的任务,所以我所做的就是使用Twitter调用(来自一个客户机)来获取每个用户所需的信息。因为我想要的信息没有什么特别之处,只是一些公共数据,所以我使用了未经身份验证的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();
}
}
这是很大的工作(就速度和充分的目的),但它有速度限制的问题。也就是说,我每小时不能做超过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获取公共信息。
发布于 2012-01-05 14:49:53
也许您可以使用以下解决方案: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。
发布于 2012-01-05 09:10:19
我也有同样的问题。我通过开发者论坛请求twitter支持,但我没有收到有用的回复。每个API方法都有一个速率限制,一般来说,如果您是经过身份验证的,您可以有一个更大的(公共方法150,身份验证350 ),但它不是很大的价值。
如果您可以使用多个IP地址,则可以有不同的请求计数,但是最好是使用身份验证调用API,因为在这种情况下,计数不是针对IP的,而是针对用户的。
twitter利率限制策略在这里定义:https://dev.twitter.com/docs/rate-limiting/faq
发布于 2012-01-17 10:03:23
您也可以使用像Gnip这样的服务。
他们储存了所有的推特!
https://stackoverflow.com/questions/8739801
复制相似问题