今回は、認証が必要のない、一番簡単そうなAPI「statuses/user_timeline」を使って、指定したアカウントのタイムラインを読み込みリストに表示します。
Twitter APIについては、「観測気球」様のTwitter API 仕様書 (日本語) [最新版]を参考にさせていただきました。
コンソールに表示でも良かったのですが、画面がないと淋しいので、一応画面ありです。
フォームにアカウント名を指定する「textBox1」と受信したXMLを表示する「textBox2」、タイムラインをリストで表示する「listBox1」、「button1」を配置しました。
private const string EXP = "http://twitter.com/statuses/user_timeline/{0}.xml"; public Form1() { InitializeComponent(); textBox1.Text = "twj"; } // // twitterサーバーからデータを取得します。 // public string ReadData(string account) { // URL作成 string url = string.Format(EXP,account); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string result = reader.ReadToEnd(); reader.Close(); response.Close(); // WebClientを使うなら、こんな感じ // WebClient client = new WebClient(); // client.Encoding = Encoding.UTF8; // byte[] data = client.DownloadData(url); // string result =Encoding.UTF8.GetString(data); return result; } private void button1_Click(object sender, EventArgs e) { string account = textBox1.Text; string result = ReadData(account); // 取得XML表示 textBox2.Text = result; // XMLドキュメントを読み込む XmlDocument doc = new XmlDocument(); doc.LoadXml(result); //XPath式を使って[text]ノードのリストを抜き出す。 XmlNodeList nodes = doc.SelectNodes("//statuses/status/text"); // リストボックスに[text]を登録 foreach(XmlNode node in nodes) { listBox1.Items.Add(node.InnerText); } }
こんな感じになりました。
今回は出来るだけシンプルに短いソースを心がけましたので、他のAPIの使用を前提にした汎用性は持たせていません。
また、xml, json, rss, atomの形式のデータが取得できるようですが、馴染が深いxml形式を今回は使用しました。
rss, atom形式のAPIによっては使えないものがあるようです。
定数EXPは、「statuses/user_timeline」APIを用いて、URLの最後のファイル名にあたるところの「{0}.xml」({0}はstring.Formatを使って、アカウント名「twj」を挿入するプレスホルダです。)は、アカウント名のデータを「xml」形式で得することを指定しています。
サンプル画像で使用しているIDの「twj」はTwitter日本語ホームページ開発者(社?)のアカウントで、公式アカウントと一般的に言われているものを例として使わせていただきました。
初心者である私にうってつけのコードでした。
返信削除非常に参考になります。
mibiさんコメントが、始めていただいたコメントです。妙にうれしいです。励みになります。
返信削除OAuth認証でしかダメになったらしく動きません。。
返信削除