twitterのストリームAPIが面白そうだったのでちょっとのぞいてみた
twitterでAPIというと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