Perl 㧠CSS ã»ã¬ã¯ã¿
ruby ã§ã¹ã¯ã¬ã¤ãã³ã°ã㦠web ã®æ å ±ãåå¾ããã®ã«ã¯ãä»ã¾ã§æ£è¦è¡¨ç¾ã xpath ã§ãã£ã¦ãã®ã§ãããã¨é¢åã§ãããã§ããµã¨ scrAPI ã¨ããã¹ã¯ã¬ã¤ãã³ã°ãã¼ã«ããããç¥ã£ãã®ã§ããããããããªã便å©ããã
ãã®ãã¼ã«ãããã使ãã¨ãCSS3 ãªã»ã¬ã¯ã¿ãè¨è¿°ãããã¨ã§ãè¦ç´ ãåå¾ãããã¨ãã§ãã¾ãã
ã¨ãã Ruby ã® scrAPI ã§ã® CSS ã»ã¬ã¯ã¿ãããæãã§ãããã¾ããªãã¨æããããã¦è¦ã¦ããã ãã©ã
Per discussions in CSS Selector in Perl, I made a quick perl module HTML::Selector::XPath, which is available at http://svn.bulknews.net/repos/public/HTML-Selector-XPath/trunk/ now.
㨠miyagawa ãããã¢ã¸ã¥ã¼ã«ãä½ã£ã¦ã¾ãããCSS ã»ã¬ã¯ã¿ã Xpath ã«å¤æããã¨ãããã®ãããç±ããæ°æ°ããã³ã¼ã㯠Prototype ã® CSS ã»ã¬ã¯ã¿ã®å é¨å¦çã Xpath ã«å¤æãã¦ããããã ãããããã¤ã³ã¹ãã¤ã¢ã ãããªããããããã° Perl 㧠CSS ã»ã¬ã¯ã¿ã§ã¹ã¯ã¬ã¤ãã³ã°ã§ãã!
trunk ãã checkout ãã¦ã¡ãã£ã¨è©¦ãã¦ã¿ã¾ããã
use HTML::TreeBuilder::XPath; use Smart::Comments; my $selector = HTML::Selector::XPath->new('ul.bookmarkinfo li.favorited'); my $xpath = $selector->to_xpath; ### $xpath
ã¨ããæã㧠CSS ã»ã¬ã¯ã¿ãªæååãã XPath ãçæãã¦åºåããã¨ã
### $xpath: '//ul[contains(concat(\' \', @class, \' \'), \' bookmarkinfo \')] //li[contains(concat(\' \', @class, \' \'), \' favorited \')]'
ã¨ã確ãã« XPath ã«å¤æããã¦ããã¿ã³ã¬ã*1
id ãå ¥åããã¨ããã® id ãã¯ã¦ãªããã¯ãã¼ã¯ã§ä½ä»¶ãæ°ã«å ¥ããã¦ããã調ã¹ãã¹ã¯ãªãããã¨ãããããªæãã§ç°¡åã«æ¸ãã¾ãã
#!/usr/local/bin/perl use strict; use warnings; use URI::Fetch; use HTML::Selector::XPath; use HTML::TreeBuilder::XPath; my $id = shift or die "usage: $0 <id>"; my $res = URI::Fetch->fetch(sprintf 'http://b.hatena.ne.jp/%s/', $id) or die URI::Fetch->errstr; my $tree = HTML::TreeBuilder::XPath->new; $tree->parse($res->content); $tree->eof; my @nodes = $tree->findnodes(selector('ul.bookmarkinfo li.favorited')); printf "User '%s' is favorited from %d users\n", $id, $nodes[0]->content->[1]; sub selector { HTML::Selector::XPath->new(shift)->to_xpath; }
å®è¡ããã¨ã
% perl favorited_count.pl jkondo User 'jkondo' is favorited from 683 users
ã¨åºãã楽ãã³! ãã°ããã¼ã夢ãã²ããããããã¤ãã³ãããªãã³ã§æå®ããã·ã³ãã«ã«ä»£å ¥ã§ãããããªãã¬ã¼ã ã¯ã¼ã¯ã§ã©ããããã° scrAPI ã®å®æã§ããªã
ãã¨ããã® HTML::Selector::XPath ã®ãã¹ããæè¿è©±é¡ã® Test::Base ã使ã£ã¦ã¦ã¤ã«ã¹ãã¨ããã¨ãããè¦éãã¾ããã
*1:éä¸ã§æ¹è¡ãã¦ã¾ã