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 するようにした。
こんにゃろ
[ツッコミを入れる]



