1

我得到了一个简单的任务,其中涉及获取多个 Twitter 帐户的关注者数量。可能有 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 个小时来完成这个简单的任务!..

我试图走一条不同的路……因为我需要的信息是公开的,所以我决定下载每个 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 获取公共信息。

4

3 回答 3

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小。

于 2012-01-05T14:49:53.667 回答
1

我有同样的问题。我通过开发者论坛询问了 twitter 支持,但没有收到有用的回复。每个 API 方法都有一个速率限制,一般来说,如果你通过了身份验证,你可以有一个更大的(公共方法为 150,已验证为 350),但这不是一个很大的价值。

如果您可以使用多个 IP 地址,则可以有不同的请求计数,但最好调用带有身份验证的 API,因为这种情况下的计数不是针对 IP,而是针对用户。

twitter 速率限制政策在这里定义: https ://dev.twitter.com/docs/rate-limiting/faq

于 2012-01-05T09:10:19.080 回答
0

你也可以使用像 Gnip 这样的服务

他们已经存储了所有的推特!

于 2012-01-17T10:03:23.490 回答