Twitterを書き始めた。
ということで(どういうことで?)TwitterのWebAPIを軽くたたいてみようと思う。
早速C#で新しいプロジェクトをこさえる。
とりあえずは、public_timelineを使ってみるよ。
因みに、API仕様の和訳は、下記サイトを参考にしました。
http://watcher.moe-nifty.com/memo/docs/twitterAPI11.txt
URLと引数がわかればこっちのもん!(引数はとりあえず無視)
XMLやJSONやRSSやAtom形式で戻りは指定できるけど、今回はXMLを選んでみた。
認証は基本認証らしいのでNetworkCredentialを使うことも忘れずに。
ということで、さくっと実装してみた。戻りのXMLには、すごいいっぱい情報が入ってるけど、idとtextだけ抜き出してみた。
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Xml.Linq;
namespace Com.Wankuma.Kazuki.Twitter
{
public class Account
{
public string UserID { get; set; }
public string Password { get; set; }
}
public class TwitterApi
{
private static readonly string PUBLIC_TIMELINE_URL = "http://twitter.com/statuses/public_timeline.xml";
public Account UserAccount { get; set; }
public IList<TwitterStatus> PublicTimeline()
{
var client = new WebClient();
// 認証情報セット
client.Credentials = CreateNetworkCredential();
// GET!
var data = client.DownloadData(PUBLIC_TIMELINE_URL);
var xml = XElement.Parse(Encoding.UTF8.GetString(data));
// ID, Textを抜きだす
var result = from status in xml.Descendants("status")
select new TwitterStatus
{
ID = int.Parse(status.Element("id").Value),
Text = status.Element("text").Value
};
return result.ToList();
}
private NetworkCredential CreateNetworkCredential()
{
return new NetworkCredential(UserAccount.UserID, UserAccount.Password);
}
}
}
GETで取得してLINQ to XMLでさくっと抜いてるだけだからそんなに難しくない。
簡単なテストプログラムを書いて実験!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Wankuma.Kazuki.Twitter;
using System.Globalization;
namespace TwitterClientTest
{
class Program
{
static void Main(string[] args)
{
string user = Console.ReadLine();
string pass = Console.ReadLine();
var twitter = new TwitterApi
{
UserAccount = new Account { UserID = user, Password = pass }
};
var ret = twitter.PublicTimeline();
foreach (var r in ret)
{
Console.WriteLine("{0}:{1}", r.ID, r.Text);
}
}
}
}
ユーザ名とパスワードを入力するとpublic_timelineのデータをConsoleに出力する。
実行結果は,,,パスワードとかあるからNG!!