トップ «前の日記(2013-02-05) 最新 次の日記(2013-02-07)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2013-02-06 :-(

_ 午前

0550 起床

0740 南武線7割り運転によりいつもより30分遅れで仕事場到着

0830 検討

_ 午後

1300 検討

1720 退勤

_

1900 読書メーター

2100 飯。サーモンムニエル

_ [読書メーター][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 するようにした。

こんにゃろ