userstreamapi

twitterのUser Stream APIPerlで叩いて見た。
テスト用のアカウントを用意してメインアカウントをフォローさせてメインアカウントの発言を拾う実験。
Perlで実装しようとしたら、SSL通信したほうがいいよみたいなdenpaを受信したので、SSL通信に対応させようとした。
しかしPerlにはSSLを使ったsocketが標準では無いようだったので、IO::Socket::SSLとNet::SSLeayとOpenSSLを導入して、トライしてみたら出来た。
LWPを用いてHTTPS通信はできるんだけど、コンテンツをストリームで取得する必要があったので、socketで得る必要があった。
送信するHTTPヘッダを作成するのに手間取ってしまったので、メモ。


以下を要求すると、パブリックなタイムラインをストリームでGET
stream.twitter.com/1/statuses/sample.json
コイツにアクセスするときに生成するヘッダ情報は以下。

GET /1/statuses/sample.json HTTP/1.1
Connection: close
Authorization: OAuth realm="",oauth_consumer_key="XXXXXXXXXXXXXXXXXXXXX",oauth_nonce="XXXXXXXXXXXXXXXXXXXXXXXXX",oauth_signature="XXXXXXXXXXXXXXXXXXXXXXXXXXXXX%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="0000000000",oauth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",oauth_version="1.0"
Host: stream.twitter.com
Content-Type: application/x-www-form-urlencoded

意外と普通でした。
ただ必須だろうと思われるHostを省略してしまっていて、それでなかなか動作しなくて、何でだろうって半日ぐらいHTTPリクエストヘッダについて調べてた。


フォーマットを指定できるようで、JSONがメジャーということとか、
定期的(10秒ぐらい?)に空のメッセージをrecvしたりすることがわかった。
JSONなら1行で1データなのでわかりやすくて良いね。XMLだったら片腕が消し飛んでたことだろう。
JSONAPIの把握ができれば、それっぽいクライアントも作れそう。頑張ろう。