Twitter Client

かずきの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# 偉大すぎる。

image

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です