koboの書籍購入リストをRubyのMechanizeでスクレイピングしてみた。
電子書籍の値引き大戦が激しく続いてますね。
koboで買ったりamazon kindleで買ったりとしているうちに
どっちで何を買ったのやらワケワカになってきたので、
koboの購入リストをスクレイピングで入手してみることにしました。
うまく動いたのでメモっときます。
書名とURLだけを拾ってます。
ちなみにURLをみると商品コードっぽい値
(以下だと、book-Y3K0n79Qi02XUP7okD6ngg)が
埋まっているようにもみえます。
しかし、商品ページに行くと
商品番号: 4911923890001
という記述があったりでどのコードで管理されているのかちょっとわからない感じです。
amazonのASINみたいなのがあると整理しやすくていいのですけどねー。
require 'mechanize' USERID = "<koboのID>" PASSWORD = "<パスワード>" agent = Mechanize.new agent.verify_mode = OpenSSL::SSL::VERIFY_NONE # SSL証明書を検証しない agent.user_agent_alias = "Windows IE 7" # ログインする agent.get("https://rakutensecure.kobobooks.com/auth/Rakuten/login") do |page| page.form["EditModel.RakutenUsername"] = USERID page.form["EditModel.Password"] = PASSWORD page.form.submit end # ライブラリリストを読む books = {} agent.get("https://rakuten.kobobooks.com/library/reading.html") do |page| # 全ページ数を調べる doc = Nokogiri::HTML(page.body) totalpage_size = doc.xpath('//span[@class="SCPagingNumTotalPages"]').first.text.to_i # ページ数だけ繰り返す totalpage_size.times do doc = Nokogiri::HTML(page.body) # <h3>は他にもあるけれど中に<a>があるのは書誌情報だけなのでこれで doc.xpath('//h3/a').each do |a| books[a.text] = a['href'] end # <a id="ctl00_...>をクリックで次ページ page = agent.page.link_with(:dom_id => "ctl00_ctl00_ctl00_Body_Body_ContentBody_cntlPaginationBottom_linkNextPage").click end end # とりあえずてきとー出力 books.sort.each do |n,u| puts n end puts books.size
動作確認時には、agent.history(アクセス履歴)が便利だったので忘れないようにしたい。