いくつかの Twitter アカウントのフォロワー数を取得するという簡単なタスクが与えられました。私が作成しているアプリケーションが各ユーザーのフォロワー数を取得して合計することになっている 1000 の Twitter ユーザー名が存在する可能性があります。
簡単な作業のように思えるので、私が行ったことは、( C# クライアントからの) Twitter API 呼び出しを使用して、各ユーザーに必要な情報を取得することでした。私が求めている情報は特別なものではなく、一部の公開データであるため、認証されていない呼び出しを使用しました。
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();
}
}
これは(速度と目的を十分に満たすという点で)非常に機能しますが、レート制限に問題があります。つまり、1 時間あたり 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 から公開情報を取得するための、よりスマートで効率的な方法があることを期待/確信しています。