2012年3月11日日曜日

Twitter4Rで、例外(uninitialized constant)が発生

Rubyで、Twitter API(Twitter4R)を試たところ、タイムラインの取得で例外(uninitialized constant)が発生しました。
試したコードはコレです。
client = Twitter::Client.new(:login => 'userid_01', :password => 'passwd_01')
timeline = client.timeline_for(:public) do |status|
  puts status.user.screen_name, status.text
end

この時の例外メッセージはコレです。
lib/twitter/client/base.rb:77:in `rest_access_token': uninitialized constant Twitter::Client::Error (NameError)
lib/twitter/client/base.rb:16:in `rest_oauth_connect'
lib/twitter/client/timeline.rb:79:in `timeline_for'

これだと本当の原因とメッセージの示す内容が乖離しすぎており、解決は厳しすぎます。
Twitterでは 2010年8月31日に、Twitter APIのBASIC認証が廃止されています。
http://blog.jp.twitter.com/2010/06/twitter-api-oauth.html

現在ではOAuth(オース)で認証しなければなりません。
TwitterのOAuthを利用するためには、Twitterで事前にトークンを発行する必要があります。
登録はココからできます。
https://dev.twitter.com/apps/new

OAuthで行う場合の例
require 'rubygems'
gem 'twitter4r'
require 'twitter'
client = Twitter::Client.new(:oauth_access =>
  {:key    => 'access_token_01',
   :secret => 'access_token_secret_01'
})
timeline = client.timeline_for(:public) do |status|
  puts status.user.screen_name, status.text
end