はてなブログの記事一覧を取得したくなったので、ちょっと調べてみました。
はてなが提供している Atom Publishing Protocol を使うと簡単に取ってこれそうです。
Atom Publishing Protocol とは
Atom Publishing Protocol(以下 AtomPub) はウェブリソースを公開、編集するためのアプリケーション・プロトコル仕様です。はてなブログのAtomPubと通じて、開発者ははてなブログのエントリを参照、投稿、編集、削除するようなオリジナルのアプリケーションを作成できます。
認証が必要
はてなブログAtomPubを利用するには認証が必要です。
OAuth認証、WSSE認証、Basic認証のいずれかが利用できますが、今回はWSSE認証、Basic認証を使ってみます。
必要なもの
ルートエンドポイントとAPIキー
ブログの「設定」-「詳細設定」画面にルートエンドポイントとAPIキーが載ってますのでそれを控えておいて下さい。
記事を取得する(Basic認証)
まずはお手軽なBasic認証から。CredentialsにはてなのID(ユーザ)とAPIキー(パスワード)を指定してす。
取得したレスポンスの内容は「はてなブログAtomPub - Hatena Developer Center」を見て下さい。
var hatenaId = "[はてなのID]"; var apiKey = "[APIキー]"; var endpoint = "[ルートエンドポイント]/entry"; using (var cl = new WebClient()) { cl.Credentials = new NetworkCredential(hatenaId, apiKey); cl.Encoding = Encoding.UTF8; var xml = cl.DownloadString(endpoint); return AtomPaser.Parse(xml); }
記事を取得する(WSSE認証)
WSSE認証はこんな感じ。
var hatenaId = "[はてなのID]"; var apiKey = "[APIキー]"; var endpoint = "[ルートエンドポイント]/entry"; var enc = Encoding.GetEncoding("UTF-8"); var nonce = SHA1.Create().ComputeHash(enc.GetBytes(DateTime.Now.ToString())); var now = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ"); var list = new List<byte>(); list.AddRange(nonce); list.AddRange(enc.GetBytes(now)); list.AddRange(enc.GetBytes(apiKey)); var digest = SHA1.Create().ComputeHash(list.ToArray()); var value = string.Format( "UsernameToken Username=\"{0}\", PasswordDigest=\"{1}\", Nonce=\"{2}\", Created=\"{3}\"" , hatenaId , Convert.ToBase64String(digest) , Convert.ToBase64String(nonce) , now ); using (var cl = new WebClient()) { cl.Headers.Add("X-WSSE", value); cl.Encoding = Encoding.UTF8; var xml = cl.DownloadString(endpoint); Console.WriteLine(xml); }