はじめに
rubyの勉強を兼ねて、ruby + herokuを使って無料でTwiterBotを作ったので、そのやり方をメモしますφ(..)
作ったもの
rubyのメソッド、調べて勉強φ(..)!(ver2.3.0)
— ruby勉強bot (@ruby_study_bot) 2017年6月25日
Class : Integer
Method : positive?
Manual : https://t.co/azefw87oBd
ruby(v2.3.0)の主要クラスと、そのメソッドとrubyリファレンスマニュアルの該当ページを1時間に1回呟きます! rubyの勉強にお役に立てれば幸いです。(o・ω・o)
作り方
準備
Twitterアカウントの作成
Bot用に使用するTwitterアカウントの作成を行います。 メールアドレスが必要となりますが、作成がめんどくさい場合は、下記のようは方法を使っても大丈夫です。 http://kantandays.com/twitter-fukusu-account/
Twitter Developperサイトにてアプリを作成
Twitter Developersサイトにてアプリケーションを作成します。
項目 | 設定値 | 設定例 |
---|---|---|
Name | アプリの名前 | ruby_study_bot |
Description | アプリの説明 | ruby勉強用のボットです。 |
Website | 作成したTwitterアカウントのページ | https://twitter.com/ruby_study_bot |
設定イメージ
他の項目は任意項目のため設定不要です。
アクセストークンの生成
作成したBotアプリのKey and Access Token
タブに移動し、Create my access token
から生成します。
生成したAccess Token
、Access Token Secret
と既に生成されているConsumer Key
、Consumer Secret
は、後ほどプログラム内で使用するので、メモしておきます。
Botアプリの作成
作業フォルダの作成
作業用のフォルダを作成します。フォルダ名は任意です。
$ mkdir twitter_bot
git管理下に設定
下記コマンドを実行し、作業フォルダをgit管理下にします。
$ git init
GemFileの作成
作成したフォルダでGemfile
を作成します。
$ cd twitter_bot $ touch Gemfile
作成したGemfile
を下記のように変更します。
source 'https://rubygems.org' ruby '2.3.0' gem 'sinatra', '1.4.7' gem 'twitter', '5.16.0' gem 'dotenv'
編集が完了したら下記コマンドを実行し、gemをインストールします。
$ bundle install
Twitter Botのコードを書くファイルを作成
下記コマンドを実行し、必要なファイルを作成します。
$ touch app.rb tweet.rb config.ru .env
ファイル | メモ |
---|---|
app.rb | webアプリのメインファイル、routing等を定義 |
tweet.rb | 実際の投稿処理を記述 |
config.ru | webアプリの設定ファイル |
.env | 環境変数管理用のファイル |
環境変数の設定
.env
ファイルに、生成した各KEY、SECRETを記載します。
CONSUMER_KEY=生成したBotアプリのConsumer Key CONSUMER_SECRET=生成したBotアプリのConsumer Secret ACCESS_TOKEN=生成したBotアプリのAccess Token ACCESS_TOKEN_SECRET=生成したBotアプリのAccess Token Secret
Twitter Botのプログラミング
- Twitterクライアントの生成と投稿処理を
tweet.rb
に記述します。 - herokuでsinatraアプリであることを認識されるための設定を
config.ru
に記述します。 - ルーティングを
app.rb
に記述します。
tweet.rb
require 'date' require 'twitter' require 'dotenv/load' class Tweet def initialize # 投稿内容の初期化 @text = "" # クライアントの生成 @client = Twitter::REST::Client.new do |config| config.consumer_key = ENV['CONSUMER_KEY'] config.consumer_secret = ENV['CONSUMER_SECRET'] config.access_token = ENV['ACCESS_TOKEN'] config.access_token_secret = ENV['ACCESS_TOKEN_SECRET'] end end # Tweetの投稿処理呼び出し def send_tweet create_text update end # ツイート本文の生成 def create_text # 投稿内容を設定 @text = "test" end end private # Tweet投稿処理 def update begin @client.update(@text) rescue => e p e # エラー時はログを出力 end end end # ツイートを実行 if __FILE__ == $0 Tweet.new.send_tweet end
config.ru
require_relative 'app.rb' run Sinatra::Application
app.rb
require 'sinatra' require_relative 'tweet.rb' get '/' do 'under construction' end get '/send_tweet' do 'Closed' end
herokuにデプロイする
下記コマンドを実行し、今までの変更をローカルリポジトリに反映します。
$ git add -A $ git commit -m "first commit"
下記コマンドを実行し、herokuのリポジトリを作成しローカルリポジトリの内容を反映します。
$ heroku login $ heroku create $ git push heroku master
投稿スケジュールの作成
スケジュール実行は、scheduler
アドオンを使います。
下記コマンドを実行して、インストールし設定画面を開きます。
$ heroku addons:create scheduler:standard $ heroku addons:open scheduler
下記を参考にスケジュールを設定したら完了です。※1時間おきの設定
参考にさせて頂いたページ
http://blog.ruedap.com/2011/02/09/ruby-heroku-twitter-botblog.ruedap.com