Мне было дано простое задание, которое включает подсчет подписчиков ряда учетных записей в твиттере. Может быть 1000 имен пользователей в твиттере, которые приложение, которое я создаю, должно подсчитывать подписчиков каждого пользователя и суммировать их.
Кажется, что это простая задача, поэтому я использовал вызовы API Twitter ( из клиента 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-файла (размером более 300 КБ) не является действительно разумным способом сделать это. ПЛЮС занимает около 2 часов, чтобы завершить задачу.
Что я прошу?
Я надеюсь / уверен, что есть более умный и эффективный способ получения публичной информации из Twitter.