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