読者です 読者をやめる 読者になる 読者になる

人生のヒント

私が経験したことが、誰かの人生のヒントになればと願い書きます。

Ruby On RailsサイトからTwitter自動投稿する(twitter,whenever)

RubyOnRails Twitter whenever
スポンサーリンク

f:id:hinthint:20160912085853j:plain

 Ruby On RailsサイトからTwitterの自動投稿をすることで、狙ってた時刻通りに投稿できたりしてTwitter運用の手間が省けます。

 

今回は、Ruby On RailsサイトからTwitterの自動投稿をテーマに書いていきます。

参考にしたURLは、下記です。

http://qiita.com/takaho624/items/880833446d821a882cd8

http://morizyun.github.io/blog/whenever-gem-rails-ruby-capistrano/

 

 

1.Twitter投稿用のキー等を取得

下記サイトにTwitterアカウントでログインします。Twitterアカウントが無い場合は、作成してください。

ブログ執筆時点では携帯電話番号も登録しないと、キーの取得はできません。

 https://apps.twitter.com/

 

アプリケーションを登録、Access Tokenを生成し、以下の4つのキーを控えておきます。

・Consumer Key (API Key)

・Consumer Secret (API Secret)

・Access Token

・Access Token Secret

 

Access Levelは、「Read and write」です。

 

 

2.インストール

いつものようにサーバにrootでログインします。

# su - rails

$ cd work/foo

$ vi Gemfile

Gemfileに以下記述を記入します。

gem 'whenever', require: false

gem 'twitter'

以下コマンドを実行します。

$ bundle install

 

 

3.投稿用スクリプトを作る

以下コマンドを実行します。

$ vi lib/tasks/twitter.rake

lib/tasks/twitter.rakeに以下記述を記入します。

先ほど控えたキー4つは、このスクリプトに記載します。

この例では、1分間隔で2つの内容をツイートします。

require 'twitter'

namespace :twitter do
  desc "Twitter自動投稿"
  task :tweet => :environment do
    client = get_twitter_client
    tweet1 = "投稿したい内容1"
    update(client, tweet1)

    sleep(60)

    tweet2 = "投稿したい内容2"
    update(client, tweet2)
  end
end

def get_twitter_client
  client = Twitter::REST::Client.new do |config|
    config.consumer_key        = "Consumer Key (API Key)"
    config.consumer_secret     = "Consumer Secret (API Secret)"
    config.access_token        = "Access Token"
    config.access_token_secret = "Access Token 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

 

 

 4.wheneverで投稿時刻設定する

以下コマンドを実行する。

$ bundle exec wheneverize .

$ vi config/schedule.rb

config/schedule.rbに以下記述を記入します。

# 出力先のログファイルの指定
set :output, 'log/crontab.log'
# ジョブの実行環境の指定
set :environment, :production

env :SHELL, "/bin/bash"
env :PATH, "/home/rails/.rbenv/shims/:/bin:/usr/bin:/sbin:/usr/sbin:$PATH"
# 毎時間rakeタスクを実行
every 1.day, at: '00:00 am' do
  rake "twitter:tweet"
end

 

以下コマンドを実行する。

$ RAILS_ENV=production bundle exec whenever --update-crontab

$ crontab -l

でcrontabに登録されていることを確認する。

また、登録した時刻にTwitterが自動投稿されたことを確認して完了です。

 

 

5.まとめ

投稿用スクリプトの変数tweet1やtweet2でツイートするメッセージを変えることが出来ます。

もちろん加工していけば、ActiveRecordでDBから文字を抽出可能です。

 

Facebookでも同じように自動投稿するスクリプトを作る手順もありますが、私はTwitterからFacebookに同じメッセージを投稿させることで代用しています。