TwitterArchiveFilter を cygwin 上で動かす

何も考えずに実行するとエラーが出ちゃう

$ ruby twitterarchivefilter.rb  -k vim -p 10
Keyword => vim
PageNum => 10
LogFile => archive.log
/usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/reader.rb:216:in `parse_page': Scraper::Reader::HTMLParseError: Unable to load /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/../tidy/libtidy.dylib (Scraper::Reader::HTMLParseError)
from /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/base.rb:865:in `document'
from /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/base.rb:749:in `scrape'
from /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/base.rb:347:in `scrape'
from twitterarchivefilter.rb:141:in `getItems'
from twitterarchivefilter.rb:119:in `getArchives'
from twitterarchivefilter.rb:67:in `filter'
from twitterarchivefilter.rb:221

これは require している scrapi が原因。

cygwin libtidy.so

でグーグル先生に聞くとすぐにヒットするけど、添付の libtidy.so が linux 専用らしい orz
で、cygwin で動かすには以下を

setup.exe から tidy をインストールする

いんすとーる

libtidy.so と libtidy.dll をリネームする

$cd /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/tidy
$mv libtidy.dll libtidy.dll.linux
$mv libtidy.so libtidy.so.linux

cygwin の dll をコピーする

cp /usr/bin/cygtidy-0-99-0.dll /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/tidy/libtidy.dll

あとは実行

$ ruby twitterarchivefilter.rb -u basyura -p 10

とすると、archive.log に出力される。

2008-06-28T12:03:59+00:00 : うごいたっぽ
2008-06-28T12:02:31+00:00 : いや、うごいた・・・のか?
2008-06-28T12:01:49+00:00 : TwitterArchiveFilter がようやく cygwin で動いた orzz
2008-06-28T11:28:47+00:00 : ruby 1.8.7-p22-1 がインストールされてる
2008-06-28T11:23:10+00:00 : cygwin に tidy だけ入れるつもりがいろいろ入っちゃってるみたい・・・いつも困るんだが・・・

ちなみに、libtidy.so もリネームしているのは

  • /usr/lib/ruby/gems/1.8/gems/scrapi-1.2.0/lib/scraper/reader.rb
begin 
  Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.so")
rescue LoadError
  begin
    Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.dll")
  rescue LoadError
    Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.dylib")
  end
end

となっているので、先に libtidy.so が読み込まれると困るから。