2007年 10月 02日

scrubyt

なんか結局うまくいかなくてソース読むっていう……
Extractor.define が返すのは Scrubyt::ScrubytResult で (Scrubyt::Result ではない)、ScrubyResult は ResultNode のサブクラスになってる。
ResultNode は Array のサブクラスになっているんだけど、Array#inspect が空の Array を表示してしまっていて混乱する。実際には中身があったりする。ドキュメントおうよりソース読んだほうがいいことを実感した……

あと mechanize が 1.8.5 以上要求する。ubuntu LTS は ruby1.8.4 なのでエラーでる。(1.9 は入れてるけど、まだ 1.9 で gem を入れたくない)

/usr/lib/ruby/gems/1.8/gems/mechanize-0.6.10/lib/mechanize/inspect.rb:44: undefined method `pretty_inspect' for class `WWW::Mechanize::Page' (NameError)

めんどいので

class Object; def pretty_inspect(*); self.inspect; end; end

書いてほうち。

#!ruby -Ku

class Object; def pretty_inspect(*); self.inspect; end; end

require "rubygems"
require "scrubyt"

mixi_community = Scrubyt::Extractor.define do
	fetch "http://mixi.jp/"
	fill_textfield "email",    config["user"]
	fill_textfield "password", config["pass"]
	submit

	fetch "http://mixi.jp/view_community.pl?id=26374"

	# member_num "#communityInfo .contents03 .memberNumber"
	member_num "//dl[@class='communityInfolistMiddle clearfix memberNumber']/dd[1]"
end

num = mixi_community.to_hash[0][:member_num][/¥d+/].to_i

あたらしくなった mixi でコミュニティの参加人数とるやつをかいた。慣れればかなり早くすくれいぱー書けそうだなぁ。
でも自動解析みたいなのは読みにくいと思う