Twitterで認証する方法(Batch)
Twitter のタイムラインを取得して、どうのこうのするバッチを作っている(まだ途中)。Twitter のタイムラインを取得する API は認証が必要。Webサービスやアプリ等は OAuth を使うが、バッチの場合はそうも行かない。バッチなど人が介在しないシステムではどうすればいいかという内容。
2 〜 3年前にも一度やったことあるはずだけど、そのときは記録してなかったので今回は記録しておく。
環境
- ruby 1.9.3p327 (2.0 じゃないです、すいません)
- gem
- twitter (4.5.0) http://sferik.github.com/twitter/
- foreman (0.60.2) https://github.com/ddollar/foreman
foreman は環境変数に値を設定する為に使っている。Twitter の認証に直接的には関係しない。
手順
1. アプリを登録
Twitter のデベロッパー向けサイトからアプリを登録する。URLもとりあえず入れる(heroku で動かすつもりなので、heroku のアプリの URL を入れた)。Consumer key と Consumer secret をバッチで使用する。
2. access token を作成する
登録したアプリの詳細画面下部に Create my access token というボタンがあるので、それをクリックし、access token を作成する。Access token と Access token secret をバッチで使用する。
3. 環境変数に値を設定する
foreman を使うと .env ファイルに書かれている内容を ENV に設定してくれる (コードの中に書く方法もある)。gem twitter は特定の名前の環境変数が設定されていると、そこから自動的に値を取得してくれる。それに従い変数名と値を .env に記述する。
TWITTER_CONSUMER_KEY={Consumer key の値} TWITTER_CONSUMER_SECRET={Consumer secret の値} TWITTER_OAUTH_TOKEN={Access token の値} TWITTER_OAUTH_TOKEN_SECRET={Access token secret の値}
4. バッチを書く
とりあえずはこんな感じで。
require 'rubygems' require 'bundler' Bundler.require timelines = Twitter.user_timeline("ymmtmsys")
5. 実行
foreman を使って実行させる。まず Procfile に以下の内容を記述する。
worker: bundle exec ruby sample.rb
書いたら実行します。タイムラインが取得できれば OK。
foreman start