ユーザ用ツール

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がドキュメントのインストールに失敗する場合がある。致命的ではないが、何とかして欲しいところ。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information