我得到了一个简单的任务,其中涉及获取多个 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 获取公共信息。