窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

Ruby:rubyとherokuを使って無料で作るTwitterBot

f:id:madogiwa0124:20170625191213p:plain

はじめに

rubyの勉強を兼ねて、ruby + herokuを使って無料でTwiterBotを作ったので、そのやり方をメモしますφ(..)

作ったもの

ruby勉強bot

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

設定イメージ f:id:madogiwa0124:20170625184641p:plain

他の項目は任意項目のため設定不要です。

アクセストークンの生成

作成したBotアプリのKey and Access Tokenタブに移動し、Create my access tokenから生成します。
生成したAccess TokenAccess Token Secretと既に生成されているConsumer KeyConsumer Secretは、後ほどプログラム内で使用するので、メモしておきます。

Botアプリの作成

作業フォルダの作成

作業用のフォルダを作成します。フォルダ名は任意です。

$ mkdir twitter_bot

git管理下に設定

下記コマンドを実行し、作業フォルダをgit管理下にします。

$ git init

GemFileの作成

作成したフォルダでGemfileを作成します。

$ cd twitter_bot
$ touch Gemfile

作成したGemfileを下記のように変更します。

  • sinatra:Webフレームワークsinatraを使用するためのgem
  • twitter:TwiterAPIを使用するためのgem
  • dotenv:環境変数を.envファイルで管理するためのgem
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のプログラミング

  1. Twitterクライアントの生成と投稿処理をtweet.rbに記述します。
  2. herokuでsinatraアプリであることを認識されるための設定をconfig.ruに記述します。
  3. ルーティングを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時間おきの設定 f:id:madogiwa0124:20170625184647p:plain

参考にさせて頂いたページ

b0npu.hatenablog.com

blog.ruedap.com