ヤフオクの入札状況をTwitterで実況するBOTを作ってみる(3)


 少し間があいてしまったが、最後はtweetする部分。これは簡単で、OAuth::AccessTokenインスタンスからpostメソッドを呼ぶだけでよい。

 前々回紹介したアクセストークン取得の場合はリクエストトークンインスタンスからアクセストークンインスタンスを取得したが、botではアクセストークンインスタンスを生成する必要がある。これは簡単で、まずコンシューマインスタンスを生成する。

consumer = OAuth::Consumer.new(
CONSUMER_KEY,
CONSUMER_SECRET,
:site => "http://twitter.com"
)

生成したコンシューマインスタンスを使ってアクセストークンインスタンスを取得する。

token = OAuth::AccessToken.new(consumer, ACCESS_TOKEN, ACCESS_SECRET)

あとはpostメソッドでtweetすればよい。

token.post('/statuses/update.json', :status => str)

 今回はtweet先が固定だったので異常系の処理を全く書かなかったが、実際には

  1. OAuthが有効かを確認する必要がある。ユーザが認証を無効にしている場合がある。
  2. Twitterは割と落ちている、自宅回線の場合は回線が落ちることもあるので、エラー系処理を確実にしておいたほうがよい。

後者は重要で、実際にTwitterに繋がらずに例外を吐いていることも多かった。正しくtweetできた場合は Net::HTTPOK が返ってくる。

 また、同一内容を再度tweetしようとすると 403 Forbidden が返ってくるので、エラー処理を実装するならこれも考慮したい。認証失敗は 401 Unauthorized なので、4XXはエラーとして一括りに処理すると意図しない動作をする可能性がある。