Twitterのタイムラインを監視してキーワードにマッチしたらGrowlするRubyスクリプト
Macで使えるTwitterのクライアントで、自分にあった良いものがなかなか見つからない。
いろいろ試した中では、TIGとLimeChatの組み合わせがなかなか良かったけど、ほんの少し細かいところで物足りなかった。
そこで、自分で作ってみた。同種のスクリプトを作った人は多数いると思うけど、気にしない。
twittertail.rb
Rubyで書いた。コードは以下。
require 'rubygems' require 'twitter' require 'ruby-growl' require 'yaml' require 'cgi' $KCODE = 'UTF8' config = YAML.load(STDIN) growl = Growl.new('localhost', 'twitterclient.rb', ['notify'], nil, nil) twitter = Twitter::Base.new(config['username'], config['password']) cache = [] while true timeline = twitter.timeline(:friends).reverse timeline.each do |status| next if cache.include?(status.id) screen_name = status.user.screen_name name = CGI.unescapeHTML(status.user.name) text = CGI.unescapeHTML(status.text) created_at = Time.parse(status.created_at).strftime('%Y-%m-%d %H:%M') if config['keywords'].any?{|k|[screen_name, name, text].any?{|t|t.match(k)}} puts puts " #{screen_name}(#{name}) #{created_at}" puts " #{text}" puts growl.notify('notify', "#{screen_name}(#{name})", text) else puts "#{screen_name} : #{text}" end cache << status.id end sleep config['interval'] end
config.yaml
設定ファイルはyamlで書く。以下は例。
username: hogehoge password: passpass interval: 60 keywords: - nacookan - mac - ruby
準備
RubyからTwitterとGrowlを使えるようにするため、gemsでインストールしなきゃいけない。
$ sudo gem install twitter $ sudo gem install ruby-growl
こんなだったかな。忘れたけど、最初sudoでやるのを忘れてて悩んだのは覚えてる。
使い方
twittertail.rbとconfig.yamlを同じディレクトリに置いて、ターミナルから以下のようにして起動させる。
$ ruby twittertail.rb < config.yaml
これでタイムラインの監視が始まる。
とりあえず取得したデータをそのターミナルの標準出力に書き出す。さらに、keywordsにマッチした場合はGrowlする。マッチしたときは標準出力に書き出すのもちょっと目立つようにしている。
無限ループして、intervalに指定した秒数ごとに新着を取得し、同様に処理する。終了させるときは control + c。
想定している使い方としては、自分のユーザー名や気になるユーザー名、あとは気になる単語などをkeywordsに指定してこのスクリプトを動かしておく感じ。ログを読みたいときはターミナル上のログを見れば良いし、気になる発言だけはすぐにGrowlされるので見逃しにくくなる。
投稿は他で
しかしこのスクリプトには投稿機能が無いので、別なツールで投稿することになる。QuickSilver用のTwitter投稿プラグインがサクっと使えて良さそう(QuickSilver使ってるなら)。まあRuby Twitter Gem入れてるならターミナルからもtwitterコマンドで投稿できるけど。
Windowsで動くのかな
Growl for Windowsがあるので、そのままWindowsでも動くのかな?試してないのでわからない。
追記
改良した。Growlのスティッキーやアイコン表示、sayコマンドによる読み上げ機能などを追加。詳細は以下で。