youRoomのAPIを使ってみた
youRoomのAPIを使ってなにかしてみたいと思いました。
APIを使うには申し込みが必要です。申し込みはここからできました。
そうすると、Consumer KeyとConsumer Secretをすぐに発行してもらえます。
発行してもらったConsumer KeyとConsumer SecretをもとにAPIをたたくために必要なアクセストークンを取ってみます。
こちらの記事を参考にしてます。
Sinatra と OAuth を使って Twitter のタイムラインを取得してみた
こんな環境で試しました。
# ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-darwin9.8.0] # gem list *** LOCAL GEMS *** oauth (0.4.3) rack (1.2.1) sinatra (1.0)
youroom.rb
require 'rubygems' require 'sinatra' require 'oauth' helpers do include Rack::Utils alias_method :h, :escape_html end enable :sessions configure do # use Rack::Session::Cookie, :secret=> Digest::SHA1.hexdigest(rand.to_s) KEY = "Consumer Key" SECRET = "Consumer Secret" end template :layout do <<-EOS <html> <head><title>OAuth Example with Sinatra</title></head> <body> <%= yield %> </body> </html> EOS end def base_url default_port = (request.scheme == "http") ? 80 : 443 port = (request.port == default_port) ? "" : ":#{request.port.to_s}" "#{request.scheme}://#{request.host}#{port}" end def oauth_consumer OAuth::Consumer.new(KEY, SECRET, :site => "http://youroom.in") end get '/' do erb %{ <a href="/request_token">OAuth Login</a> } end get '/request_token' do puts base_url callback_url = "#{base_url}/access_token" request_token = oauth_consumer.get_request_token(:oauth_callback => callback_url) session[:request_token] = request_token.token session[:request_token_secret] = request_token.secret redirect request_token.authorize_url end get '/access_token' do request_token = OAuth::RequestToken.new( oauth_consumer, session[:request_token], session[:request_token_secret]) begin @access_token = request_token.get_access_token( {}, :oauth_token => params[:oauth_token], :oauth_verifier => params[:oauth_verifier]) rescue OAuth::Unauthorized => @exception return erb %{ oauth failed: <%=h @exception.message %> } end session[:access_token] = @access_token.token session[:access_token_secret] = @access_token.secret erb %{ oauth success! <dl> <dt>access token</dt> <dd><%=h @access_token.token %></dd> <dt>secret</dt> <dd><%=h @access_token.secret %></dd> </dl> } end #for 1.9.2 enable :run
KEYとSECRETには発行してもらったConsumer KeyとConsumer Secretを設定します。
起動します。
# ruby youroom.rb
ブラウザでhttp://localhost:4567にアクセスします。
「OAuth Login」のリンクをクリックします。
youRoomの承認画面が表示されるので、「Allow」をクリックします。
Access TokenとAccess Secretが画面に表示されます。
アクセストークンを取得しました!
ruby-1.9.2-p0 > require 'rubygems' ruby-1.9.2-p0 > require 'oauth' ruby-1.9.2-p0 > require 'json' ruby-1.9.2-p0 > consumer = OAuth::Consumer.new(<Consumer Key>, <Consumer Secret>, :site => "http://youroom.in") ruby-1.9.2-p0 > access_token = OAuth::AccessToken.new(consumer, <Access Token>, <Access Secret>) ruby-1.9.2-p0 > res = access_token.get("https://www.youroom.in/r/<group-param>/all?format=json") #<group-param>のRoomのタイムラインを取得する ruby-1.9.2-p0 > JSON.parse(res.body)
10個しか発言がとれてない。
pageパラメータを指定して10個ずつ取らないとダメみたいです。こんな感じで
ruby-1.9.2-p0 > res = access_token.get("https://www.youroom.in/r/<group-param>/all?format=json&flat=true&page=3")
いったい全部で何ページあるのかわからない・・