最近Twitterっていう「おたく何してるん?*1」って質問にひたすら答え続けるコミュニティサイトっぽいものが流行ってます。
IRCとか携帯とか、あちらこちらから投稿するプログラムができてきますが、僕が使ってる nadoka という IRC ボットでもそれを実現するためのプログラムを書きました。
つかいかた
以下のコードを twitterbot.nb として plugin フォルダに入れます。
# -*-ruby-*- require 'net/http' require 'kconv' class TwitterBot < Nadoka::NDK_Bot def on_client_privmsg client, ch, message if (@ch == nil) or ((@ch != nil) and (@ch.upcase == ch.upcase)) if @pattern =~ message status = message.sub(@pattern, '') if send_twitter(status) msg = Cmd.privmsg(@state.nick, 'sent to twitter:' + status) else msg = Cmd.privmsg(@state.nick, 'twitter send faild:' + status) end client.send_to_client client.add_prefix(msg, self.class.to_s) end end end def send_twitter status begin Net::HTTP.version_1_2 req = Net::HTTP::Post.new('/statuses/update.json') req.basic_auth @user, @passwd req.body = 'status=' + URI.encode(status.toutf8) Net::HTTP.start('twitter.com',80) {|http| http.read_timeout = @timeout res = http.request(req) print res.body } rescue Exception => e return false end return true end def bot_state return "<#{self.class.to_s} user: #{@user}>" end def bot_initialize @ch = @bot_config.fetch(:ch, nil) @user = @bot_config.fetch(:user, nil) @passwd = @bot_config.fetch(:passwd, nil) @pattern = @bot_config.fetch(:pattern, /\s\.$/) @timeout = @bot_config.fetch(:timeout, 60) end end
あとはこんな設定を追加すればOK。
{ :name => :TwitterBot, :user => 'hoge', :passwd => 'fuga', :ch => '#伊勢的新常識', # このボットが反応するチャンネルを限定する場合に書きます },
設定が終わったら nadoka をリロード。末尾に半角スペース*2をつけた発言をすると twitter に送られます。
このプログラム書くに当たって最速インターフェース研究会 :: bluewindからtwitterを更新できるようにRubyでシンプルなクライアントを書いたを参考にさせていただきました。というかもろコピペ。
2007/05/15 update:nowa版に合せて修正加えました。