Twibot+ScrubytでTwitterボットのプロトタイプを作ってみた

ふと作れるか試してみたかったんだろうな。理由は以下。

動機

  • id:wakutekaがボット作ってて、それがかわいかったから
  • 前にtwibotというRubyのライブラリを見かけてて、なんとなく気になっていたから
  • 金曜の夜だけど、ぼっちだったから
  • スクレイプとかしてみたかったから

ホントどーでもいい理由ばっかだw

参考にしたサイトなど

そして使用したライブラリ。ほぼこれのおかげで作れちゃうわけですよ。
公開してくれてありがとう:-)

ScRUBYt: スクレイピング担当
http://scrubyt.org/
Twibot: つぶやき担当
http://www.cjohansen.no/en/ruby/twibot_a_microframework_for_twitter_bots_in_ruby

どちらも初めて使ったけど、そもそも込みいったことをしてないので僕でも大丈夫!
ScRUBYtはexampleをみるとなんとなく分かる。
あとSafariスクレイピングのパス(?)を調べるのにちょっと使った。

コード

dritoshiがつぶやいていたので、やじうまWatchさんで作ってみた。
5/16少しコードを変更しました。pollメソッドを上書きして、つぶやき終わると終了するように変えています。

#!/usr/bin/env ruby
#
#  Created by mako on 2009-05-15.

begin
  require 'rubygems'
  require 'scrubyt'
  require 'twibot'
  
  module Twibot; class Bot; def poll # 追加しました
  end; end; end                      # 追加しました
  
  url = "http://internet.watch.impress.co.jp/static/yajiuma/"
  ret = Scrubyt::Extractor.define do
    fetch url
    record '//td[@class="body-text"]' do
      title "//b"
    end
  end

  contents = ret.to_hash.to_s.split(/,■/)
  day      = contents.shift.gsub(/title|200\d/, '')
  contents.each do |message|
    post_tweet day + message + " " + url
  end

rescue Exception => e
  p e.message
  p e.backtrace
end

これに加えて、スクリプトのあるディレクトリに"./config/bot.yml"を置いてアカウント情報を書いている。

どんな気持ちだった?+(あるとすればの)今後

今週はいろいろトラブル続きだったので、ちょっと気分転換に(ry
botのプロトタイプとは言うものの、エラーとかの対応をどうすれば良いのかまだまったく調べてない。
そもそも定期的につぶやくようになってないし、家のUbuntuのアップデートに失敗したままなので設置もすぐにはできないし。
でも気軽にいろいろ試せるのって気分いいなー、と思ったところで寝ます。おやすみなさい、良い夢を:-)

追記

Twibotですが名前の通りTwitterのボットを作るプチフレームワークです。
もう少しいうと、特定のリプライやメッセージに反応して応答するようなボットを作るためのものみたいです。そのため基本的な挙動として待ち受け状態を維持します (生成されたインスタンスがpollし続ける、と言えばいいのかな?)。今回のように「スクレイピング->つぶやく」というだけのボットには少し過ぎた道具です。
でも逆に言えば、一方的につぶやくだけではない、何か他のユーザーなどとやりとりし合うボットを作ろうと思っている方は使用を考えてみたら、とお勧めします。さくっとプロトタイプが出来ると思いますよ!