推特限速

时间:2012-01-05 08:53:06

标签: c# api twitter rate

我被赋予了一个简单的任务,其中包括让关注者计算一些推特账号。可能有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获取公开信息。

3 个答案:

答案 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这样的服务

他们存储了所有的推特!