====== RubyによるBot作成 ======
===== 概要 =====
Rubyには、Twitterにアクセスするためのライブラリが整備されており、Botを容易に作成することが可能となっている。
ライブラリは Ruby Gems経由で配布されているので、Gemsの設定をあらかじめしておく。
また、Twitterにアクセスするためには、[[アプリケーションの登録]]も済ませておく必要がある。
===== ライブラリの導入 =====
Gemsを使って、次のようにする。
$ gem install twitter
自分のアカウントで行った場合には、自分だけが利用可能なライブラリとしてインストールされるが、Super Userで行えば、誰でも利用可能なライブラリとしてインストールされる。
===== ひな形の作成 =====
Twitterにアクセスして、メッセージをポストするアプリを参考までに書いておく。なお、連続して実行すると、Twitter::Error::Forbidden の例外を出す。
ex.messageには**Status is a duplicate.**とあるように、「投稿済み」になるので、これは、どうしようもない。Botとして運用する場合には、この例外が出たときに retryしてもダメなので、処理を分ける必要がある。
Botとしてdaemon化出来るように -d (或いは --daemon)オプションをつけると、そのように処理をする。するが、今はただ1つメッセージを投稿して終わるので、意味はない。
なお、Ruby 1.9以降なら、daemon化は、fork & setsidではなく、ただ単に Process.daemon とするだけで良い。
Vine Linux 6の時点では、Ruby は 1.8.7であり、この機能は利用できない。((また、一部、rdocコマンドの引数が新しいバージョンと異なっており、gemがドキュメントのインストールに失敗する場合がある。致命的ではないが、何とかして欲しいところ。))
#!/usr/bin/ruby
require "rubygems"
require "twitter"
require "logger"
require "optparse"
OPTS = {}
opt = OptionParser.new
opt.on('-d', '--daemon') {|v| OPTS[:d] = v }
argv = opt.parse(ARGV)
LOG = Logger.new("bot.log")
# --- Application keys ---
CONSUMER_KEY = "XXXXXXXXXXXXXXXXXXXXXX"
CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN = "#########-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# --- Application keys ---
MultiJson.engine = :ok_json
Twitter.configure do |config|
config.consumer_key = CONSUMER_KEY
config.consumer_secret = CONSUMER_SECRET
config.oauth_token = ACCESS_TOKEN
config.oauth_token_secret = ACCESS_TOKEN_SECRET
end
if OPTS[:d]
exit if fork
Process.setsid
end
client = Twitter::Client.new
begin
client.update("テストツイート")
rescue Twitter::Error::Forbidden => ex
# this should be the message posted.
LOG.warn ex.message
exit
rescue => ex
LOG.warn ex
sleep 5
retry
end
CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, およびACCESS_TOKEN_SECRETには、[[アプリケーションの登録]]を行った際に得られる値をそれぞれ設定する。勿論、XXXX……のままで実行しても、動かない。
[[Twitter]]へ戻る。