目次

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であり、この機能は利用できない。1)

#!/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へ戻る。

1)
また、一部、rdocコマンドの引数が新しいバージョンと異なっており、gemがドキュメントのインストールに失敗する場合がある。致命的ではないが、何とかして欲しいところ。