#!/usr/bin/env ruby
# jbook.rb ver.0.2a 2002.4.7-2002.4.26, 2003.1.20
#ポイント率
#処理残し
require 'net/http'
require 'cgi'
#require 'simpleuri'
#require 'webagent'
class CacheBib_jbook < CacheBib
attr_accessor :isbn
attr_accessor :flag_review #, :affiliate_code
attr_accessor :url_site
attr_accessor :title, :author, :publisher, :pubdate, :price, :desc
attr_accessor :image
attr_accessor :tax, :sellingprice, :publisher_kana, :series
attr_accessor :reviews, :reviewlist
attr_accessor :insystemKcode, :outputKcode, :messageKcode
def initialize ()
super
@reviews = Array.new()
@flag_review = true
@url_site = 'http://www.jbook.co.jp/'
@insystemKcode = 3 #sjis #1-jis,2-euc,3-sjis
@outputKcode = 2 #euc
@messagetKcode = 3 #sjis
end
#===== ===== parts ===== =====
def word_delivery ()
delivery = ''
flag = false
# title-check -> no-info / get-info check
if !@title.nil?
flag = true
if @delivery.nil?
delivery = "ない"
else
delivery = @delivery
delivery = '販売' if delivery == '販売中'
if @delivery =~ /販売中止/s
delivery = "中止"
elsif @delivery =~ /在庫有り/s
delivery = "1〜3日"
elsif @delivery =~ /在庫僅少/s
delivery = "1〜3日"
elsif @delivery =~ /お取り寄せ/s
delivery = "4〜10日"
elsif @delivery =~ /予約受付中/s
delivery = "予約"
end
end
else
message = "WAR; maybe data-error, no-title."
@stderr.puts message.kconv(@messageKcode)
end
return delivery, flag
end
#===== ===== url ===== =====
def url_bibinfo ()
url = @url_site + "product.asp?isbn=#{@isbn.delete('-').upcase}"
return url
end
#===== ===== parse ===== =====
def parse_bibinfo (str)
#----- set key and data ------
mode_tbl = {
#
#
:title => '', # + series + author
#
:publisher => '販売元:',
:price => '定価:',
:sellingprice => '販売価格:',
:tax => '税区分:',
:pubdate => '出版年月:',
:size => '種類:',
:isbn => 'ISBN:',
:delivery => '"salestatus"',
:content => ''
# :review => '')
titles.each { |line|
title = nil
if line =~ /([^>]+?)<\/b>/
title = $1
end
if line =~ /bgcolor=\"#D59FFF\"/
if @title.nil?
@title = title
else
@series = 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[:prise].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?
@size = data[:size].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:size].nil?
@isbn = data[:isbn].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:isbn].nil?
@delivery = nil
@delivery = data[:delivery].scan(/([^>]+?)<\/b>/)[0].to_s if !data[:delivery].nil?
@desc = data[:content].gsub(/<[^>]+>/,'').strip if !data[:desc].nil?
@desc = @desc.sub(/■ 内容紹介 ■/,'').strip if !@desc.nil?
if data[:content] =~ / /s
image = $1.to_s
@image = @url_site + image if image !~ /default.jpg/
end
=begin
reviewsplit = data[:review].to_s.split(mode_tbl[:review])
reviewlist = []
reviewsplit.each { |column|
if column =~ /cust_id=(.+?)'/
custid = $1
reviewlist << custid
end
if column =~ /(.+?)店長/
custid = $1.strip
reviewlist << custid
end
}
@reviewlist = reviewlist.join("\t") if reviewlist.size > 0
if @flag_review
reviewsplit.each{ |column|
review = {}
if column =~ /cust_id=(.+?)'/
review["cust_id"] = $1
end
if column =~ /(.+?)店長の『(.+?)』コーナー/s
review["reviewer"] = $1.strip
review["corner"] = $2.strip
end
if column =~ /#{review["reviewer"]}\s*\[(.+?)\]\s*−\s*(.+?日)(.+?)<\/td>/s
review["value"] = $1
review["date"] = $2
review["content"] = $3
review["content"].gsub!(/^<.+?>/,'').strip!
review["content"].gsub!(/\r/,'')
review["content"].gsub!(/\n/,"\t")
end
@reviews << review if review.size > 0
}
end
=end
end
#===== ===== main ===== =====
def set_info #===== set local-value from @info (from cache) =====
#----- set book-info (from cache) -----
@flag_overprint = true if @info["overprint"]
@isbn = @info["isbn"] unless @info["isbn"].nil?
@title = @info["title"]
@delivery = @info["delivery"]
end
def get_info #===== get book-info(@info) from url =====
message = 'CHK; access; ' + @url_site + ' -> ' + @isbn
@stderr.puts message.kconv(@messageKcode)
#----- get book-info -----
agent = WebAgent.new()
agent.uri = url_bibinfo
begin
agent.get()
body = agent.body.kconv(@insystemKcode)
parse_bibinfo(body)
rescue
end
if !@flag_overprint
@info = {}
end
@info["isbn"] = @isbn
@info["title"] = @title
@info["author"] = @author
@info["publisher"] = @publisher
@info["pubdate"] = @pubdate
@info["price"] = @price
@info["desc"] = @desc
@info["image"] = @image
# @info["translator"] = @translator
@info["publisher_kana"] = @publisher_kana
@info["series"] = @series
@info["sellingprice"] = @sellingprice
@info["tax"] = @tax
@info["delivery"] = @delivery
@info["reviewlist"] = @reviewlist
@info["overprint"] = true if @flag_overprint
if @flag_review
@info["reviews"] = @reviews
end
end
end
|