#!/usr/bin/env ruby # jbook.rb # ver.0.2a 2002.4.7-2002.4.26, 2003.1.20 # ver.0.3 2004.01.06-2004.01.07 VƒLƒƒƒbƒVƒ…‚Ι‘Ξ‰ž #review #ˆΘγA‚β‚θŽc‚΅ if __FILE__ == $0 require 'cookie' require 'webagent' require 'cache' require 'cachebib' end class CacheBib_jbook < CacheBib attr_accessor :publisher_kana, :sellingprice, :tax, :pubtype attr_accessor :point_per, :point def initialize () super @shop_id = 'jbk' @url_site = 'http://www.jbook.co.jp/' @reviews = Array.new() @flag_review = true end #===== ===== parts ===== ===== def word_delivery () delivery = '' flag = false if !@title.nil? # title-check -> no-info / get-info check flag = true if @delivery.nil? delivery = "‚Θ‚’" else delivery = @delivery delivery = '”Μ”„' if delivery == '”Μ”„’†' if @delivery =~ /”Μ”„’†Ž~/s delivery = "’†Ž~" elsif @delivery =~ /έŒΙ—L‚θ/s delivery = "1`3“ϊ" elsif @delivery =~ /έŒΙ‹Ν­/s delivery = "1`3“ϊ" elsif @delivery =~ /‚¨Žζ‚θŠρ‚Ή/s delivery = "4`10“ϊ" elsif @delivery =~ /—\–ρŽσ•t’†/s delivery = "—\–ρ" end end else message("WAR; maybe data-error, no-title.") end return delivery, flag end #===== ===== url ===== ===== def url_isbnsearch ( isbn = @isbn ) isbn = isbn.delete('-').upcase url = @url_site + "product.asp?isbn=#{isbn}" return url end def url_bibinfo ( id = @id ) id = @isbn if id.nil? return url_isbnsearch(id) if id.to_s.size >= 10 #Œ…”‚ΕID‚©ISBN‚©”»’f url = @url_site + "product.asp?product=#{id}" return url end #===== ===== parse ===== ===== def parse_bibinfo ( str ) #----- set key and data ------ mode_tbl = { # #
:title => '', # +label,author #') titles.each { |line| title = nil if line =~ /([^>]+?)<\/b>/ title = $1.strip end if line =~ /bgcolor=\"#D59FFF\"/ if @title.nil? @title = title else @label = title end else @author = title end } if !data[:publisher].nil? data[:publisher].scan(/([^>]+?)<\/b>/) { |str| if @publisher.nil? @publisher = str else @publisher_kana = str end } end @price = data[:price].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:price].nil? @sellingprice = data[:sellingprice].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:sellingprice].nil? @tax = data[:tax].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:tax].nil? @pubdate = data[:pubdate].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:pubdate].nil? @pubtype = data[:type].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:type].nil? if !data[:size].nil? @pubsize = data[:size].scan(/([^>]+?)<\/b>/)[0].to_s if @pubsize =~ /^(.+?ƒy[ƒW)/s @pubsize, @page = $`.strip, $1.strip end end @isbn = data[:isbn].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:isbn].nil? @id = data[:sku].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:sku].nil? if data[:point_per] =~ /#{mode_tbl[:point_per]}(.+)
/smi per = $1 @point_per = per.gsub(/<[^>]+?>/,'').gsub(/\s+/,' ').strip end @delivery = data[:delivery].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:delivery].nil? if data[:review] =~ /“o˜^Œ”F(\d+)/s review_num = $1.strip @review_num = review_num if review_num.to_i > 0 end if data[:review] =~ /•½‹Ο–ž‘«“xF(\d+)/s @point = $1.strip end desc = data[:desc].gsub(/\s+/,' ').gsub(/
/,"\t").gsub(/<[^>]+>/,'').strip if !data[:desc].nil? desc = desc.sub(/‘.+?“ΰ—eΠ‰ξ.+?‘/,'').strip if !desc.nil? @desc = desc if desc.to_s != '' if data[:desc] =~ /€•i‰ζ‘œ/s image = $1.to_s @image = image if image !~ /default.jpg/ end #ƒŒƒrƒ…[‚Ν•Κ•Ε"http://www.jbook.co.jp/review.asp?product=#{id}" end #===== ===== get/set info ===== ===== def preset_info #===== set local-value from @info (from cache) ===== super @id = @isbn.delete('-').upcase #@info["id"] end def set_info #===== set book-info(@info) from local-value ===== super #----- set info add ----- #Jbook“ΖŽ©‚̏ξ•ρ—ή @info["publisher_kana"] = @publisher_kana #o”ΕŽΠ‰Ό–Ό @info["sellingprice"] = @sellingprice #”Μ”„‰ΏŠi @info["tax"] = @tax #Ε‹ζ•ͺ @info["pubtype"] = @pubtype #Žν—ή @info["point_per"] = @point_per #ƒ|ƒCƒ“ƒg—¦ @info["point"] = @point #ƒŒƒrƒ…[•½‹Ο–ž‘«“x end end if __FILE__ == $0 p CacheBib_jbook.new.get_data('4-15-010739-4') # p CacheBib_jbook.new.get_data('4086002841') # p CacheBib_jbook.new.get_data('4106100037') end
:publisher => '”Μ”„Œ³F', # +publisher_kana :price => '–{‘Μ‰ΏŠiF', #'’θ‰ΏF' :sellingprice => '”Μ”„‰ΏŠiF', :tax => 'Ε‹ζ•ͺF', :pubdate => 'o”Ε”NŒŽF', :type => 'Žν—ށF', :size => 'ƒTƒCƒYF', # =pubsize,page :isbn => '‚h‚r‚a‚mF', :sku => 'skuF', #=id :point_per => 'ƒ|ƒCƒ“ƒg—¦^ ', :delivery => '"salestatus"', :review => 'ƒŒƒrƒ…[‚πŒ©‚ι^“o˜^‚·‚ι', # =review_num,point :desc => '', # +image :none => '^
' } mode = :none data = Hash.new() #----- read and sepalate by key(mode_tbl) ------ str.each{|line| l = line.chomp.chomp("\r").kconv(@insystemKcode) mode_tbl.each{ |key,keydata| mode = key if /#{keydata}/s =~ l } if mode != :none if data[mode] data[mode] << l else data[mode] = l end end } return if data[:title].nil? #----- parse ----- titles = data[:title].split('