我被赋予了一个简单的任务,其中包括让关注者计算一些推特账号。可能有1000个Twitter用户名,我正在创建的应用程序应该让每个用户的关注者计数并总结它们。
似乎是一项简单的任务,所以我所做的就是使用Twitter API调用(来自C#客户端)来获取每个用户所需的信息。由于我之后的信息并不是一些特殊的公共数据,我使用了未经认证的电话。就像这样:
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个小时来完成这个简单的任务! ..
我试图走另一条道路..因为我需要的信息是公开的,我决定下载每个推特账户的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 :(得分: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。
答案 1 :(得分:1)
我遇到了同样的问题。我通过开发者论坛询问了Twitter支持,但我没有收到有用的回复。每种API方法都有一个速率限制,一般情况下,如果您通过身份验证,则可以使用更大的方法(公共方法为150,经过身份验证为350),但这不是一个很好的值。
如果您可以使用多个IP地址,则可以使用不同的请求计数,但如果您使用身份验证调用API会更好,因为在这种情况下,计数不是针对IP,而是针对用户。
此处定义了Twitter限价政策: https://dev.twitter.com/docs/rate-limiting/faq
答案 2 :(得分:0)
你也可以使用像Gnip这样的服务
他们存储了所有的推特!