かずきのBlog http://blogs.wankuma.com/kazuki/archive/2008/04/24/135133.aspx に、 Twitter Client のコードが載っていた。
面白そうなので、ちょっとビルドしてみたら、簡単にデータが取れてしまった。
コードをイベントハンドラを呼び出すように少し変えたので、メモ。
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Linq;
using System.Xml.Linq;
namespace t1
{
public struct Account
{
public string UserID { get; set; }
public string Password { get; set; }
}
public class TwitterStatus
{
public long ID { get; set; }
public string Text { get; set; }
}
class TwitterClient
{
private readonly string PUBLIC_TIMELINE_URL = "http://api.twitter.com/statuses/public_timeline.xml";
private readonly string FRIENDS_TIMELINE_URL = "http://api.twitter.com/1/statuses/friends_timeline.xml";
public Account UserAccount { get; set; }
public void GetFriendsTimeline()
{
var client = new WebClient();
// 認証情報セット
client.Credentials = CreateNetworkCredential();
// GET!
var data = client.DownloadData(FRIENDS_TIMELINE_URL);
var xml = XElement.Parse(Encoding.UTF8.GetString(data));
// ID, Textを抜きだす
var result = from status in xml.Descendants("status")
select new TwitterStatus
{
ID = long.Parse(status.Element("id").Value),
Text = status.Element("text").Value
};
DataReceived(result.ToList(), null);
}
public delegate void EventHandler(Object sender, EventArgs e);
public event EventHandler DataReceived;
private NetworkCredential CreateNetworkCredential()
{
return new NetworkCredential(UserAccount.UserID, UserAccount.Password);
}
}
}
呼び出しは、
private void button1_Click(object sender, RoutedEventArgs e)
{
string user = ***;
string pass = ***;
var twitter = new TwitterClient
{
UserAccount = new Account { UserID = user, Password = pass }
};
twitter.DataReceived += new TwitterClient.EventHandler(twitter_DataReceived);
twitter.GetFriendsTimeline();
}
void twitter_DataReceived(object sender, EventArgs e)
{
IList<TwitterStatus> lis = (IList<TwitterStatus>)sender;
foreach (var r in lis)
{
string str = string.Format("{0}:{1}", r.ID, r.Text);
textBox1.Text += str + "\n";
}
}
実行結果: ここまで、1時間かからないで来てしまう。
バックグラウンドワーカー入れて、タイマー入れて、文字列をあーして、こーして、あっという間にクライアントができてしまいそう。
C# 偉大すぎる。