- 更新日: 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
【追記 2014/11/20】
はてなブックマークで以下のコメントを頂きました。
supermomonga これRailsでやる必要性あるのかな
今回のケースでは、既存のRailsプロジェクト内にTwitter botを作成するのが目的でした。実際のツイート内容はRailsモデルのDBから取得します。
なので、Twitter botを単独で作成する場合は、Railsを使わずに単にRubyスクリプトで作成すれば良いかと思います。supermomongaさんご指摘ありがとうございました。また、言葉足らずな説明ですいませんでした!
【追記ここまで】
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 の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!