ブックオフ
発売から時間の経った本の購入にはブックオフを良く利用させてもらっています。ただ残念なことに地元には小型と中型の店舗しかないので、例えばシリーズもので途中が抜けていたりすることもしばしば。こんど東京に行った時にあちらのお店でも見て回ろうかと思っていたらこちらの日記を発見。
町田のお店が大きいというのはあちこちで聞いて知っていましたが他にも大きな店がたくさんあるんですねー、原宿が一番行き易いかな。あと自由が丘の店にも行ってみたいっす。
リスト取得
てなわけでブックオフのサイトの店舗情報をちまちまと見ていたのですが一覧が欲しくなったので取得するスクリプトを作成。それにしても店舗数が1000以上もあるんですねースゴいなあ。
スクリプトはsjisで保存、同じディレクトリにbookoff.logを作成。エラー処理を行っていないので途中で停止した場合には、ID_STARTを書き換えて実行すれば追加作成される。
#!/usr/bin/env ruby $KCODE = 's' require "open-uri" ID_START = 1 ID_END = 1060 LOG = 'bookoff.log' URL = 'http://www2.info-mapping.com/bookoff/kensaku/map.asp?ID=' page = nil (ID_START .. ID_END).each do |id| p id url = '' url = URL + id.to_s open( url ) do |f| # ページ取得 page = f.read end if page == "" puts "no data" else name = "" # 店舗名 time = "" # 営業時間 addr = "" # 所在地 scale = "" # 店舗規模 accs = Array.new # アクセス案内 status = 0 page.each do |line| line.chomp! case status when 0 # 店舗名 status = 1 if /店舗名/ =~ line when 1 if /\<div.*\>(.*)<\/div>/ =~ line name = $1 status = 2 end when 2 # 営業時間 status = 3 if /営業時間/ =~ line when 3 if /\<div.*\>(.*)<\/div>/ =~ line time = $1 status = 4 end when 4 # 所在地 status = 5 if /所在地/ =~ line when 5 if /\<div.*\>(.*)<\/div>/ =~ line addr = $1 status = 6 end when 6 # 店舗規模 status = 7 if /店舗規模/ =~ line when 7 if /\<div.*\>(.*)<\/div>/ =~ line scale = $1 status = 8 end when 8 # アクセス案内 status = 9 if /アクセス案内/ =~ line when 9 if /\<td class.*\>(.*)<\/td>/ =~ line accs.push($1) elsif /^\s*\<\/table\>$/ =~ line status = 10 end else break end end File.open(LOG, "a") do |f| f.puts id.to_s f.puts "店舗名 = " + name f.puts "URL = " + url f.puts "営業時間 = " + time f.puts "所在地 = " + addr f.puts "店舗規模 = " + scale if accs.size > 0 f.puts "アクセス案内" accs.each{|i| f.puts i} end f.puts "----------" end end end