ITコンサルティング・SNSマーケティングのサイバーエース

RubyでプログラミングしたTwitterのBOTをさくらインターネットのcronにて定期実行する方法

今回使用した開発環境

  • Ruby 1.8.7 (2012-10-12 patchlevel 371) ⇒ ruby 2.1.1p76 (2014-02-24 revision 45161) #1
  • RubyGems 1.8.25 ⇒ 2.2.2 #1
  • Twitter 5.7.1
  • OS Windows8
  • サーバ さくらのレンタルサーバ スタンダード

#1 2014/3/28さくらサーバのバージョンアップに伴い、旧環境では動作しなくなりました。
  詳細は、当ページ下部「追記_140403」を参照ください。


上手くいかない場合には…

弊社ではRubyをはじめ、各種WEBアプリ制作の有償サポートもございます。
ご希望の方はお気軽にお問合せ下さい。
例)
・あらかじめ指定した幾つかの文章を順番またはランダムで自動的にツイートする機能
・自動フォロー返し機能
・キーワードに反応して自動的にリツイートするBOT
・キーワードに反応して自動的にフォローするBOT 等々

UPDATE 2014/4/3

環境構築

Twitterアカウント取得

下記アドレスからアカウントを取得する
https://twitter.com/signup


Twitterアプリ登録申請

取得したTwitterアカウントでログインし、下記アドレスからアプリ登録を行う
https://apps.twitter.com/
後ほど、ConsumerKey,ConsumerSecret,AccessToken,AccessTokenSecretの4つが必要となります
注:AccessToken,AccessTokenSecretの取得にはTwitterアカウントのモバイル登録が必要となります


Rubyのバージョン確認

TeraTerm等のターミナルエミュレータを使用しサーバ(今回はさくらインターネット)にログインする
ruby -v」 のコマンドでRubyのバージョンを確認し、「ruby 1.8.7 (2012-10-12 patchlevel 371)」のように表示されればひとまずはOK


RubyGemsのインストール

@ home/ユーザ/配下にsrcディレクトリを作成しておく
A 作成したsrcディレクトリに移動する
B IE等のブラウザでhttp://rubyforge.org/projects/rubygems/ を開き、RubyGems の最新版を確認する
 上記URLの文書の「ダウンロード」をクリックして、rubygems-1.8.25.tgz の URL をメモる( http://rubyforge.org/frs/download.php/43985/rubygems-1.8.25.tgz )
C メモった URL を使って、以下のコマンドでダウンロード
 「ftp http://rubyforge.org/frs/download.php/43985/rubygems-1.8.25.tgz
D 以下のコマンドでダウンロードした RubyGems のアーカイブを解凍
 「tar zxf rubygems-1.8.25.tgz
E 解凍すると rubygems-1.8.25 というディレクトリが出来ているのでそこに移動する
F 以下のコマンドで RubyGems をインストール
 「ruby setup.rb --prefix=/home/User」(※/home/User の User はログインユーザー名で置き換える)


TwitterGemsのインストール

以下のコマンドで TwitterGems をインストール
 「gem install twitter

実行確認

実行ファイル(twitter.cgi)の準備

TeraPad等のテキストエディターを使用し、文字コード:UTF-8(bom付)・改行コード:LFで以下のようなコードを書く
注:rubyの拡張子は通常[.rb]だが、さくらインターネットでは[.cgi]を使用する

#!/usr/local/bin/ruby
#!/home/ユーザ名/local/bin/ruby  2014/4/3 MOD
# encoding: utf-8

ENV['RUBYLIB'] = '/home/ユーザ名/local/bin/ruby' ← ユーザ環境に合わせる  2014/4/3 ADD
ENV['GEM_HOME'] = '/home/ユーザ名/local/gems/1.8/bin/' ← ユーザ環境に合わせる
ENV['GEM_HOME'] = '/local/lib/ruby/gems/2.1.0/' ← ユーザ環境に合わせる  2014/4/3 MOD

require 'rubygems'
require 'twitter'
require 'pp'

# 証明書の検証をしない方法
require 'open-uri'
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
puts open('https://www.google.co.jp/').read

# アカウント情報の設定
client = Twitter::REST::Client.new do |config|
config.consumer_key = "環境構築時に取得したConsumerKey"
config.consumer_secret = "環境構築時に取得したConsumerSecret"
config.access_token = "環境構築時に取得したAccessToken"
config.access_token_secret = "環境構築時に取得したAccessTokenSecret"
end

# ツイートする
client.update("ツイートしたい内容")
end

実行ファイル(twitter.cgi)のアップロード

FFFTP等のFTPクライアントソフトを使用し、転送モード:アスキー・ローカル漢字コード:UTF-8 BOMにてファイルをアップロードする

サーバ側にて、twitter.cgiを右クリック→属性変更でパーミッションを755とする


cronの設定

サーバコントロールパネルにログインし、左サイドバー:アプリケーションの設定→CRONの設定をクリックする

cronの追加から、コマンドに「cd /home/ユーザ名/www/; /usr/local/bin/ruby /home/ユーザ名/local/bin/ruby twitter.cgi > /dev/null」を記載し、実行日時を設定する

以上、これで指定した時間につぶやかれれば成功です

追記_140403

さくらのレンタルサーバOSバージョンアップに伴う動作不備について

新サーバへの移設メンテナンスにより、cron定期実行でエラーとなり投稿ができなくなりました。

 【更新内容抜粋】
  OS : FreeBSD 7.1 32bit → FreeBSD 9.1 64bit
  Webサーバ: Apache 1.3 → Apache 2.2(※2)
  Perl Perl 5.8.9
  Python Python 2.7.3 → Python 2.7.5
  ※2 Apacheのバージョンアップにともない、.htaccessの書式変更が必要になる場合があります。

上記についてサポートセンターに確認したところ、下記のような返信でした。
---------------------------------------------------------------------------------------------------------
恐れ入りますが、弊社ではお客様の設置・運営されるコンテンツについて特に関与しておらず、検証等や作成方法のご案内を行っておりません。
また、.htaccess の記述方法についても、内容は多岐に渡るため弊社よりご案内させていただくことができかねます。
お手数ですが、各種専門書籍やウェブドキュメント等をご参照いただき、お客様ご自身でご解決いただけますようお願い申し上げます。
---------------------------------------------------------------------------------------------------------
自力で直すしかなさそうです…

【ウェブドキュメントとなるべく記録】
上記に伴う、主な事象(原因)と対策は以下の通り
▽バージョンアップされたOSでは古いバージョンのRuby(Gem)がサポートされていないため"require"が効いていない
 →Rubyの最新版(2.1.1)をダウンロードしてhome/ユーザ/配下へインストールする
 →Gemsを再インストールする
 →Twitterを再インストールする(ディレクトリは変わるがバージョンは同じ)
 →.cshrcを再読み込みする
 →実行ファイルで下記を更新する
  ・ENV['RUBYLIB'] = '/home/ユーザ名/local/bin/ruby' :追加
  ・ENV['GEM_HOME'] = '/local/lib/ruby/gems/2.1.0/'  :更新
 →CRONの環境変数を再設定する

▽.htaccessがBOM付となっていた(バージョンアップとの関連性は不明)
 <エラーメッセージ>
 /home/ユーザ名/www/.htaccess: Invalid command '\xef\xbb\xbfAddType', perhaps misspelled or defined by a module not included in the server configuration
 →PC側にて.htaccessをBOMなしで保存し、再アップロードする

最後に

TwitterBOTの応用について

今回はコード内に記載した内容をつぶやくだけの単純なものですが、Ruby Twitter Gemの簡易リファレンスに書かれているような機能を組み合わせて使用することも可能です

【実績紹介】
吉浜波情報まとめ:定期投稿&1時間に1回、ハッシュタグ「#吉浜波情報」「#波情報」及び、キーワード「吉浜 サーフィン」が含まれたツイートを自動でリツイートする
災害・救助情報BOT:1時間に1回、ハッシュタグ「#災害情報」「#救助」が含まれたツイートを自動でリツイートする
おだわらりんご:定期投稿&1日に1回、ハッシュタグ「#小田原」「#odawara」が含まれたツイートのユーザをを自動でフォローする


上手くいかない場合には…

弊社ではRubyをはじめ、各種WEBアプリ制作の有償サポートもございます。
ご希望の方はお気軽にお問合せ下さい。
例)
・あらかじめ指定した幾つかの文章を順番またはランダムで自動的にツイートする機能
・自動フォロー返し機能
・キーワードに反応して自動的にリツイートする機能
・キーワードに反応して自動的にフォローする機能 等々

提携ドメイン取得・レンタルサーバサービス



弊社サービス

Twitter TL