HaskellでTwitterクライアント開発blog(仮)

今すぐに挫折するかもしれない程度のモチベーションによるTwitterクライアント開発記

HaskellでOAuth(1): Request Token取得

追記)署名アルゴリズムに誤りがあったので訂正

HTTP通信のやり方を適当に抑えた所で、いよいよHaskellでOAuthプロトコル通信をやってみました。

大体は下のサイトあたりを参考にしました。

OAuthプロトコルの中身をざっくり解説してみるよ
http://d.hatena.ne.jp/yuroyoro/20100506/1273137673

HaskellでOAuthとTwitter API
http://d.hatena.ne.jp/kenkov/20110503/1304441705

が、ものすごく細かい仕様でハマりまくりましたので、ハマりポイントを晒します。

(1)Authorizationヘッダに設定する区切り文字は' & '(アンパサンド)ではなく' , '(コンマ)
→一つ目のサイトでは間違ってます。仕様変更?

(2)署名生成時、パラメータをURIエンコードするのは' & '、' = 'でつないだ後
→つまり、署名生成文字列には' & ' → ' %26 '' = ' → ' %3D 'と変換されたものが入る。

(3)リクエストするURIは、SSH通信しないなら"https:/ ~ "ではなく"http:// ~ "
これにハマりまくりました。提示されてる方はhttpsの方なので、駄目ならsをとって試したほうがいいかもです。

あとは、アプリのアクセス権限を"Read Only"から"Read and Write"に変更するとかも必要?

調べてみるとみなさん色々な所でUnauthorizedで弾かれているようです……

 

このくらいです。

実際、あんまり細かい書式には拘っていないようでした。コンマの後にスペース入れたり、パラメータのダブルクオートが無かったりしても平気でした。

署名生成のアルゴリズムとBase64エンコードはライブラリがあるのでそれを使用。
それぞれSHA1パッケージとdataencパッケージをcabalで取ってくる。

以下コード。OAuth型はとりあえず今回必要な分だけ。アクセストークンの値入れたりするフィールドは絶対いるけど。