- 2014年11月19日
- Rails
RailsでTwitter botを作成
Rails プロジェクトで Twitter bot を作成する手順です。その名の通り twitter という名前の gem を使うと、とんでもなく簡単に Twitter の各種 API を操作できます。今回は単純に “Hello Twitter!” とつぶやく bot を、Rails の rake タスクとして作ってみました。
Readme に大体のマニュアルが書いてあります。
— 環境 —
rails 4.1
ruby 2.1.2
twitter 5.13.0
Twitter bot 作成にあたって、以下のページが参考になりました。
3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発 | KumanBlog
rubyでtwitterのbotを実装する(第5世代のやり方) – Qiita
bot 用アカウントを作成し、コンシューマーキー&アクセストークンを取得
まずは bot 用の Twitter アカウントを作成してログインします。その後、以下の Twitter デベロッパーページからコンシューマーキーとアクセストークンを取得します。
「Create New App」をクリック。
1. PermissionsタブのAccess → Read and Write に設定。
2. Keys and Access TokensタブのAppication Settingsから「Consumer Key (API Key)」「Consumer Secret (API Secret)」を取得。
3. Keys and Access TokensタブのToken Actionsで「Create my access token」をクリック。
4. access tokenが生成されるので、Your Access Tokenの「Access Token」「Access Token Secret」を取得。
必要となるトークン類の準備は以上。
twitter gem をインストール
Gemfile
|
1 |
gem 'twitter' |
|
1 2 3 |
$ bundle install |
Twitter bot 用の Rake タスクを作成
Rails プロジェクト内に Twitter bot のプログラムを設置するので、rake タスクとして Twitter bot を作成することにしました。twitter という rake タスクをジェネレート。
|
1 2 3 4 |
$ bundle exec rails generate task twitter create lib/tasks/twitter.rake |
rake タスクの中身を書きます。とりあえず、”Hello Twitter!” とつぶやくだけの bot です。
lib/tasks/twitter.rake
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
require 'twitter' namespace :twitter do desc "tweet hello" task :tweet => :environment do client = get_twitter_client tweet = "Hello Twitter!" update(client, tweet) end end def get_twitter_client client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end client end def update(client, tweet) begin tweet = (tweet.length > 140) ? tweet[0..139].to_s : tweet client.update(tweet.chomp) rescue => e Rails.logger.error "<<twitter.rake::tweet.update ERROR : #{e.message}>>" end end |
“YOUR_CONSUMER_KEY” など各種トークン類は、config/secrets.yml 等で設定すれば良いかと思います。client.update は140文字以上だとエラーを返す仕様だったので、独自の update メソッドでラップしました。以下あたり参考。
10分でできるTwitter bot @ Ruby – 酒と泪とRubyとRailsと
twitter bot 作成 – Qiita
ツイートを行う rake タスクはこれで完成。
ツイートの rake タスクを実行
以下のコマンドで、rake タスクを実行します。
|
1 2 3 |
$ bundle exec rake twitter:tweet |
このコマンド実行で、設定した Twitter bot 用アカウントに “Hello Twitter!” とつぶやかれるはずです。試したところ、連続で同じ文字列でツイートすると弾かれるようなので、連続して試す場合は文字列(tweet)を変更させる。
あとは、実際にツイートする内容のロジックを組み立てるのと、定期的にツイートさせるための cron 設定など。Rails の場合であれば、whenever を使って cron でツイートの rake タスクを実行すればOKです。whenever については以下参照。
wheneverでActiveRecord管理の古いセッション情報レコードを自動で削除 | EasyRamble
- - 関連記事 -
- RailsでRSSフィードを生成
- RailsでAtomフィードを生成
- Railsで適用するレイアウトを変更する
- Railsでビューにapplicaiton.html.erbのレイアウトを適用しない
- Rails ActiveRecordで前後のレコードを取得する
- dyld: lazy symbol binding failed: Symbol not found: _iconv_open エラー
- Capistrano デプロイでエラー
- Missing host to link to! Please provide the :host parameter
- Railsのfragment cacheでビューの一部をキャッシュ
- Railsでドットを含むURLのルーティングを実現する Segment Constraints
- トラックバックURL
Leave Your Message!