ヤフオクの入札状況を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先が固定だったので異常系の処理を全く書かなかったが、実際には
- OAuthが有効かを確認する必要がある。ユーザが認証を無効にしている場合がある。
- Twitterは割と落ちている、自宅回線の場合は回線が落ちることもあるので、エラー系処理を確実にしておいたほうがよい。
後者は重要で、実際にTwitterに繋がらずに例外を吐いていることも多かった。正しくtweetできた場合は Net::HTTPOK
が返ってくる。
また、同一内容を再度tweetしようとすると 403 Forbidden が返ってくるので、エラー処理を実装するならこれも考慮したい。認証失敗は 401 Unauthorized なので、4XXはエラーとして一括りに処理すると意図しない動作をする可能性がある。