youRoomのAPIを使ってみた

youRoomのAPIを使ってなにかしてみたいと思いました。
APIを使うには申し込みが必要です。申し込みはここからできました。

youRoom 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が画面に表示されます。
アクセストークンを取得しました!

irbからアクセストークンを使ってAPIをたたいてみます。

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")

いったい全部で何ページあるのかわからない・・