December 25, 2011

Readabilityの非公開API

気になるブログエントリとかを読みやすく整形してくれるみんな大好きReadability。自分のアプリに組み込めるようにAPIも公開されています。が、API Docsの冒頭に次のような一文が。

All requests to the Readability service require access tokens.

認証マストですって。OAuth。わざわざページを読みやすくするためだけにOAuth認証なんてやってられません。現にみんな大好きReederは認証しなくてもReadabilityによる整形が可能じゃないですか!

というわけで、認証せずに使えるReadabilityの非公式なAPIをご紹介します。認証せずにページを整形するには、次のような手順を踏めば良いみたいです。

  1. CSRFトークンを取得
  2. 記事IDとセッションIDを取得
  3. 整形済みドキュメントを取得

こんな感じですね。ではもう少し詳しく書いていきます。

CSRFトークンを取得

こいつがないとリクエストを撥ねられます。http://www.readability.com/shortenにGETリクエストを投げると、csrftokenという名前のCookieを返してきます。

記事IDとセッションIDを取得

http://www.readability.com/~/にPOSTリクエストを送ります。このとき、さきほど取得したcsrftokenをCookieフィールドにセットします。加えて、X-CSRFTokenというヘッダも用意して、ここにもcsrftokenの値をセットします。リクエストボディはurl={記事URL}といった感じです。

するとレスポンスにsessionidというCookieを返してきます。レスポンスボディは次のようなJSONです。

{
	"article": {
		"url": "/articles/srfhrcfs",
		"domain": "ja.wikipedia.org",
		"excerpt": "Cocoa(ココア)は、Mac OS…",
		"title": "Cocoa"
	},
	"shortened_id": "srfhrcfs",
	"success": true,
	"original_url": "http://ja.wikipedia.org/wiki/Cocoa"
}

ここで、shortened_idが記事IDです。

整形済みドキュメントを取得

あとはhttp://www.readability.com/articles/{shortened_id}sessionid CookieをつけてGETリクエストを送れば整形されたドキュメントとして返ってきます。

まとめ

微妙に面倒くさいし、そもそも公式に用意されたものではないので、at your own riskで。いつ使えなくなってもおかしくないですよね。

一応、サンプルコード(Cocoa)をGitHubにおいておきました。

© Shun Takebayashi