tweetstreamをOAuthで

BASIC認証からOAuthにするソースコード修正はわずか

以前、tweetstreamを使ってTwitter Streaming APIにアクセスすることを試しました。その後、ツイートをログファイルに残すようにしたものの、認証方式はBASIC認証のままにしていました。OAuthというものがよくわからず、面倒臭かったからなのですが、いつまでもBASIC認証ってのもアレだろ、ってことでOAuthにしてみました。
BASIC認証からOAuthにするためのソースコードの修正はわずかで、TweetStream.configureの設定部分だけの修正で済みました。

#!/usr/bin/ruby
#coding:utf-8

require 'time'
require 'rubygems'
require 'tweetstream' 

SEPARATOR="\t"
LOGDIR="."

TweetStream.configure do |config|
  config.consumer_key = 'YOUR_CONSUMER_KEY'
  config.consumer_secret = 'YOUR_CONSUMER_SECRET'
  config.oauth_token = 'YOUR_OAUTH_TOKEN'
  config.oauth_token_secret = 'YOUR_TOKEN_SECRET'
  config.auth_method = :oauth
  config.parser   = :yajl	#using Yajl-Ruby
end

TweetStream::Client.new.sample do |status|
  if status.user.lang == "ja"
    reply = status.in_reply_to_user_id == nil ? "P" : "R" #R:Reply
    dt = Time.parse(status.created_at)
    fn = dt.strftime("#{LOGDIR}/%Y%m%d")
    dt_str = dt.strftime("%Y/%m/%d#{SEPARATOR}%X")
    text = status.text.gsub("\n", " ")
    logfile = open(fn, "a");
    logfile.puts "#{dt_str}#{SEPARATOR}#{reply}#{SEPARATOR}#{status.user.screen_name}#{SEPARATOR}#{text}"
    logfile.close
  end
end

認証文字列の取得

次の部分に記述しなければならない認証文字列がどういったもので、どうやって得るのかということがよくわかりませんでした。

  config.consumer_key = 'YOUR_CONSUMER_KEY'
  config.consumer_secret = 'YOUR_CONSUMER_SECRET'
  config.oauth_token = 'YOUR_OAUTH_TOKEN'
  config.oauth_token_secret = 'YOUR_TOKEN_SECRET'

まず、consumer_key と consumer_secret ですが、twitter developersにアクセスしてTwitterのユーザ名でログインします。僕としてはこのときのアカウントはそのアプリケーション用に新規ユーザを作っておいたほうが良いような気がします。

ログインすると、「Create a new application」というボタンが現れると思うので、そのボタンを押します。「Create a new application」というボタンが現れないときは右上のアカウント名にマウスカーソルを当てて「My applications」というメニューを選び、「My applications」画面にすると「Create a new application」ボタンが表示されるはずです。
「Create a new application」ボタンを押すと「Create an application」画面になるので、Name(アプリケーション名)、Description(アプリケーションの説明)、WebSite(アプリケーションのwebページのURL)を適当に入力します。
それらを入力したら、その下のDeveloper Rules Of The Roadを読み(読んだことにして)、「Yes, I agree」チェックボックスをチェックし、CAPTCHA文字列を入力して最下部の「Create your Twitter application」ボタンを押します。
なお、Nameは全世界のTwitterアプリケーション中でユニークなものでないとダメなようで、他のアプリケーションとダブっている場合は再度入力を促されます。
次の画面で「Create my access token」ボタンを押すと、Access tokenとAccess token secretが表示されます。また、Consumer keyとConsumer secretも同じページに表示されていると思います。

これらの文字列をコピーして、上記ソースコード中のconfig.consumer_keyにはConsumer keyとして表示された文字列、config.consumer_secretにはConsumer secret文字列、config.oauth_tokenにはAccess token文字列、config.oauth_token_secretにはAccess token secret文字列を、それぞれ代入します。あとは必要に応じてLOGDIRを修正すれば実行できるはずです。

Consumer keyとConsumer secretは、そのクライアントアプリケーションが何かを示すもののようです。Access tokenとAccess token secretはそのエンドユーザがそのクライアントを使ってアクセスするためのIDとパスワード代わりのもので、一般的にはいわゆるTwitterクライアントを使い始めるとき、Twitterのページに遷移して「このアプリケーションを許可しますか」的なことをしたときに生成され、そのアプリケーションデータとして保持されるものなのでしょう。

これらの鍵類をソース直書きしているのはちょっとイヤなのですが、どう管理すれば良いのでしょうね。