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