#!/usr/bin/env ruby
# skysoft.rb ver.0.1 2002.4.8-2003.1.20
require 'net/http'
require 'cgi'
#require 'simpleuri'
#require 'webagent'
class CacheBib_skysoft < 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, :translator, :delivery
attr_accessor :genre, :point, :category, :category_code, :size, :etc
attr_accessor :reviews, :reviewlist
attr_accessor :insystemKcode, :outputKcode, :messageKcode
def initialize ()
super
@reviews = Array.new()
@flag_review = true
@affiliate_code = nil
@url_site = 'http://www.skysoft.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
if @delivery =~ /23/
delivery = "23時間"
elsif @delivery =~ /2\-3/
delivery = "2〜3日"
elsif @delivery =~ /4\-14/
delivery = "4〜14日"
elsif @delivery =~ /取寄/
delivery = "取寄"
else
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 + 'NewSkysoft/GetTitleDetail.asp?'
url << 'Userid=' + @affiliate_code + '&' if !@affiliate_code.nil?
url << "ISBN=#{@isbn.delete('-').upcase}"
return url
end
#===== ===== parse ===== =====
def parse_bibinfo (str)
#----- set key and data ------
mode_tbl = {
:title => '--左側メニュー部分の終了--',
:genre => '',
:image => '',
:author => '著者:',
:price => '本体価格 :',
:point => 'ページプラス
ポイント\(\*1\) :',
:delivery => '納期情報\(\*2\) :',
:publisher => '出版社 :',
:isbn => 'ISBN :',
:pubdate => '発行日 :',
:category => 'カテゴリー :',
:size => '寸法 :',
:etc => 'その他の情報',
:content => '内容紹介',
:none => '●'
# :review => ']+>/,'').strip
if data[:genre] =~ //
@genre = $1.strip
end
if data[:image] =~ /').each { |line|
name = line.gsub(//,'').gsub(/<[^>]+>/,'').strip
# @author = name if name.to_s.size > 0
if name =~ / 著$/
@author = name.sub(/ 著$/,'').sub(/ +$/,'').strip
elsif name =~ / 訳$/
@translator = name.sub(/ 訳$/,'').sub(/ +$/,'').strip
end
}
if data[:price] =~ /(.+?)<\/B>/
@price = $1
end
if data[:point] =~ /(.+?)<\/B>/
@point = $1
end
if data[:delivery] =~ /(.+?)<\/B>/
@delivery = $1
end
@publisher = data[:publisher].to_s.sub(/#{mode_tbl[:publisher]}/s,'').gsub(/<[^>]+>/,'').strip
@isbn = data[:isbn].to_s.sub(/#{mode_tbl[:isbn]}/s,'').gsub(/<[^>]+>/,'').strip
@pubdate = data[:pubdate].to_s.sub(/#{mode_tbl[:pubdate]}/s,'').gsub(//,'').gsub(/<[^>]+>/,'').strip
if !data[:category].nil?
if data[:category] =~ /(.+?)<\/B>/
@category = $1
end
if data[:category] =~ /Category=([^"]+)/
@category_code = $1
end
end
if !data[:size].nil?
@size = data[:size].to_s.sub(/#{mode_tbl[:size]}/s,'').gsub(/<[^>]+>/,'').strip
end
etc = data[:etc].to_s.sub(/#{mode_tbl[:etc]}/s,'').gsub(//,'').gsub(/<[^>]+>/,'').strip
@etc = etc if etc.size > 0
if !data[:content].nil?
@desc = data[:content].to_s.sub(/#{mode_tbl[:content]}/s,'').gsub(/<[^>]+>/,'').strip.gsub(/^ +/,'').gsub(/ +$/,'').strip
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["delivery"] = @delivery
@info["genre"] = @genre
@info["point"] = @point
@info["category"] = @category
@info["category_code"] = @category_code
@info["size"] = @size
@info["etc"] = @etc
@info["reviewlist"] = @reviewlist
@info["overprint"] = true if @flag_overprint
if @flag_review
@info["reviews"] = @reviews
end
end
end