Twitterのタイムラインを監視してキーワードにマッチしたらGrowlするRubyスクリプト

Macで使えるTwitterのクライアントで、自分にあった良いものがなかなか見つからない。

いろいろ試した中では、TIGLimeChatの組み合わせがなかなか良かったけど、ほんの少し細かいところで物足りなかった。

そこで、自分で作ってみた。同種のスクリプトを作った人は多数いると思うけど、気にしない。

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
  • usernameはTwitterのユーザー名(またはメアド)。
  • passwordはTwitterのログインパスワード。
  • intervalはタイムラインの取得間隔。単位は秒。60より小さい値にすると、API制限になる可能性が高い。
  • keywordsはGrowlしたいキーワード(正規表現)。リストで指定する。投稿のユーザー名か本文にここで指定したキーワードがひとつでも含まれていたらGrowlされることになる。

準備

RubyからTwitterGrowlを使えるようにするため、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のアイコンをTwitterのユーザーアイコンにしたい

けどやり方がわからない。

Twitterアカウント

いままで自分のアカウントどこにも書いてなかった気がするので、一応書いておく。

これだよー。

追記

改良した。Growlのスティッキーやアイコン表示、sayコマンドによる読み上げ機能などを追加。詳細は以下で。