twitterのストリームAPIが面白そうだったのでちょっとのぞいてみた

twitterAPIというとhttpでpollingするAPIを思い浮かべますが、ストリームが流れてくるAPIもあるんですよね。
httpクライアントで一定時間毎に取ってくる、とかもう飽きたので、ストリームをちょっとのぞいてみました。

twitterのストリームAPIは流量に応じて何種類か用意されているのですが、一般ユーザーが簡単に使用できるのはspritzerというAPI。これは一秒に3ポストぐらいが流れてくる程度に流量が制限されているので、スクリプト言語でも余裕で処理できてしまう感じ。

プロトコル自体はHTTPベースのストリームで、認証もBASIC認証と同じ。違うのはこちらが切断するまでずーっとデータが流れてくること。
httpクライアントライブラリを使ってみても良かったのだけれど、httpってどんなかんじだっけ?という再確認もかねて、socketで書いてみたのがしたのコード。
慣れないrubyですが、まあ、目的はこなせてるのでいいかな、と。
あんまりサンプルもないですしね。

require 'json'
require 'socket'

$KCODE='UTF8'

s = TCPSocket.open("stream.twitter.com", 80)

s.write("GET /spritzer.json HTTP/1.1\r\n")
s.write("Host: stream.twitter.com\r\n")

# username:passwordをBASE64エンコードしたものを渡す
s.write("Authorization: Basic xxxxxxxxxxxxxxxxx\r\n")

s.write("\r\n\r\n")

until(s.eof?)
  while line=s.gets("\r")
    if (/^\{.*/ =~ line)
      twit=JSON.parser.new(line).parse
      print(twit["user"]["screen_name"]+":"+twit["text"]+"\r\n")
    end
  end
end
s.close