何かTwitterを使ったサービスを作ってみたくて、時間が空いている時にTwitterの仕様を眺めています。
TwitterはAPIが充実していて、非常に開発者フレンドリーです。
ただAPIの使用については回数制限などある程度の制約があるので、目的に沿って使う必要があります。
主なAPIは3種類あって、それぞれの特徴と制約です。
- REST API Methods
ユーザーが行う操作に関するAPIです。
一般的なTwitterクライアントソフトは、これを使って作られています。
IPとアカウントベースでの制限で、1時間に150回まで
申請をして許可が取れれば20,000回まで増やせるようです。
- Search API Methods
名前の通り検索系のAPIです。
IPアカウントベースの制限。REST APIに比べて、極めて多い回数を使えるようです。
これも申請によって回数が増やせるようです。
上記二つに比べて異色のAPIなのがStreaming APIです。回数制約がなく使える所が素敵です。
SearchとREST APIは一回ごとに接続切断して使う事が基本です(pull型)
これに対してStreaming APIはつなぎっぱなしで、Twitterのサーバーの方から情報を送ってきてくれます。(push型)
検索や統計等で使うのにナイスなAPIです。
Streaming APIの中にも大きく二つの系統があります。
全部のtimelineを拾ってくる系統と、取得対象のuserを絞っての系統です。
firehose, gardenhose, sample(spritzer)は、public_timelineに関するAPIです。
firehoseは、全てのpublic_timelineが流れてくるようです。2010/03/09時点では、Google,Microsoft,Yahooの他にベンチャー系の7社のみが接続許可をされています。ちなみにGoogle,Microsoft,Yahooの3社からのライセンス料は、推定で年間30億円だとか。
gardenhoseは、ランダムにサンプリングされた発現を取得できます。これも利用には許可が必要です。
sample(旧spritzer)は、gardenhoseより更に少なくなったサンプリングです。(これでもじゃかじゃか流れてきます。)
birddog, shadow, filter(follow)はuser_timelineに関するAPIです。
briddogは40万ユーザ、shadowは8万ユーザ、filterは400ユーザまでfollowできます。
briddogとshadowは許可制です。
Search,REST APIの制限回数は割ところころ変わっているようです。
またTwitter本体の負荷によって、一時的に制限が変わることもあるようです。
以下、サンプルアプリです。
しばそんノートさんのTwitter Streaming APIをRubyで試してみるそのままです。
#!/usr/bin/env ruby # coding: utf-8 require 'net/http' require 'uri' require 'rubygems' require 'json' USERNAME = '_USERNAME_' # ここを書き換える PASSWORD = '_PASSWORD_' # ここを書き換える uri = URI.parse('http://stream.twitter.com/spritzer.json') Net::HTTP.start(uri.host, uri.port) do |http| request = Net::HTTP::Get.new(uri.request_uri) # Streaming APIはBasic認証のみ request.basic_auth(USERNAME, PASSWORD) http.request(request) do |response| raise 'Response is not chuncked' unless response.chunked? response.read_body do |chunk| # 空行は無視する = JSON形式でのパースに失敗したら次へ status = JSON.parse(chunk) rescue next # 削除通知など、'text'パラメータを含まないものは無視して次へ next unless status['text'] user = status['user'] puts "#{user['screen_name']}: #{status['text']}" end end end
※Twitterのサーバー状況によって、つながらない時も多々あります。
実際に使うには、その辺りの処理とかが必要になるかと思います。
API Documentを読んでいると、Streaming APIに接続するアプリは取得するだけに専念させることをパースするのが良いようです。
パースして格納とかは別アプリにすると。納得です。
参考:
Twitter API Wiki / Twitter API Documentation
Twitter API - TwitterまとめWiki
Twitter API 仕様書(勝手に日本語
Twitter Streaming APIをRubyで試してみる
Rubyから「Twitter Streaming API」を利用して日本語のつぶやきを取得するスクリプト。:青心工機:So-netブログ