2013-02-06 :-(
_ [読書メーター][ruby][mechanize][nokogiri]読書メーターのまとめ
いままで http://book.akahoshitakuya.com/matome にアクセスして HTML を Nokogiri していたんだけど、先日 読書メーターのアップデートのタイミングでまとめページが変更され、以下のような HTML になった。
: </div><div id="tabBookmeter" class="tabArea"> <ul id="headerNavi" class="clearfix"> <li class="first"><a onclick="matome_tab_open(1);return false;" href="javascript:void(0);"><img onmouseover="smartRollover(this)" src="http://img.bookmeter.com/image/matome/navi_header_bookmeter_on.png" alt="読書メーターでまとめる" id="tab_1_image"></a></li> <li><a onclick="matome_tab_open(5);return false;" href="javascript:void(0);"><img onmouseover="smartRollover(this)" src="http://img.bookmeter.com/image/matome/navi_header_blog_off.png" alt="ブログでまとめる" id="tab_5_image"></a></li> <li><a onclick="matome_tab_open(2);return false;" href="javascript:void(0);"><img onmouseover="smartRollover(this)" src="http://img.bookmeter.com/image/matome/navi_header_facebook_off.png" alt="Facebookでまとめる" id="tab_2_image"></a></li> <li><a onclick="matome_tab_open(3);return false;" href="javascript:void(0);"><img onmouseover="smartRollover(this)" src="http://img.bookmeter.com/image/matome/navi_header_twitter_off.png" alt="Twitterでまとめる" id="tab_3_image"></a></li> <li><a onclick="matome_tab_open(4);return false;" href="javascript:void(0);"><img onmouseover="smartRollover(this)" src="http://img.bookmeter.com/image/matome/navi_header_mixi_off.png" alt="mixiでまとめる" id="tab_4_image"></a></li> :
で、
該当箇所を Mechanize すると以下のようになる。
#<Mechanize::Page {url #<URI::HTTP:0xba30d210 URL:http://book.akahoshitakuya.com/matome>} {meta_refresh} {title "読書メーター - まとめ"} {iframes} {frames} {links #<Mechanize::Page::Link "読書メーター" "/"> #<Mechanize::Page::Link "読書メーターでプログラマー募集中!" "/recruit.php?from=header_right"> #<Mechanize::Page::Link "ホーム" "/home"> #<Mechanize::Page::Link "マイページ" "/u/1142"> #<Mechanize::Page::Link "みんなのつぶやき" "/home?t=all_tl"> #<Mechanize::Page::Link "相 性" "/aishou"> #<Mechanize::Page::Link "共 読" "/yomitomo"> #<Mechanize::Page::Link "本 棚" "/category"> #<Mechanize::Page::Link "お気に入りの感想" "/favorite"> #<Mechanize::Page::Link "イベント" "/event/"> #<Mechanize::Page::Link "年間ランキング" "/award_12.php"> #<Mechanize::Page::Link "ランキング" "/ranking"> #<Mechanize::Page::Link "コミュニティ" "/c"> #<Mechanize::Page::Link "献本プレゼント" "/kenpon_list.php"> #<Mechanize::Page::Link "読書家検索" "/us"> #<Mechanize::Page::Link "まとめ" "/matome"> #<Mechanize::Page::Link "ブックカバー" "/book_cover/"> #<Mechanize::Page::Link "Kindleストア" "/kindle_books.php"> #<Mechanize::Page::Link "新刊情報" "/newbook"> #<Mechanize::Page::Link "職 本" "/jobbook"> #<Mechanize::Page::Link "ブログパーツ" "/bp"> #<Mechanize::Page::Link "採用情報" "/recruit.php?from=navi"> #<Mechanize::Page::Link "パブリッシュ" "/user_pub_list.php"> #<Mechanize::Page::Link "招 待" "/invite"> #<Mechanize::Page::Link "映画・DVD" "http://video.akahoshitakuya.com/"> #<Mechanize::Page::Link "オプション表示" "/s?from=search_option_open_link"> #<Mechanize::Page::Link "先月分" "/matome"> #<Mechanize::Page::Link "先週分" "/matome_lw"> #<Mechanize::Page::Link "昨年分" "/matome_ly"> #<Mechanize::Page::Link "先月のまとめページ" "/u/1142/matome"> #<Mechanize::Page::Link "読書メーターでまとめる" "javascript:void(0);"> #<Mechanize::Page::Link "ブログでまとめる" "javascript:void(0);"> #<Mechanize::Page::Link "Facebookでまとめる" "javascript:void(0);"> #<Mechanize::Page::Link "Twitterでまとめる" "javascript:void(0);"> #<Mechanize::Page::Link "mixiでまとめる" "javascript:void(0);"> #<Mechanize::Page::Link :
Mechanize::Page::Link らしいので
agent.page.links[31].click
とか
agent.page.links.find{|e| e.node['alt'] == 'ブログでまとめる'}.click
やればイケるかなあと思ったが怒られた。
/usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:161:in `block (2 levels) in initialize': Mechanize::UnsupportedSchemeError (Mechanize::UnsupportedSchemeError) from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:626:in `call' from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:626:in `resolve' from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:214:in `fetch' from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize.rb:407:in `get' from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize.rb:306:in `click' from /usr/pkg/lib/ruby/gems/1.9.3/gems/mechanize-2.5.1/lib/mechanize/page/link.rb:30:in `click' from book_meter.rb:38:in `get' from book_meter.rb:89:in `main' from book_meter.rb:94:in `<main>'
結局まとめページの「更新ボタン」をクリックすると http://book.akahoshitakuya.com/matome?sort=0&size=3&tab_id=5#sort_form_blog などに URI が変わるので、ここにアクセスして HTML を Nokogiri するようにした。
こんにゃろ
[ツッコミを入れる]