#!/usr/bin/env ruby
# skysoft.rb
# ver.0.1 2002.4.8-2003.8.25
# ver.0.2 2004.01.06-2004.01.07 新キャッシュに対応
# ver.0.2a 2004.04.07 7〜14日に対応
if __FILE__ == $0
require 'cookie'
require 'webagent'
require 'cache'
require 'cachebib'
end
class CacheBib_skysoft < CacheBib
attr_accessor :point, :category, :category_code, :etc
def initialize ()
super
@shop_id = 'sky'
@url_site = 'http://www.skysoft.co.jp/'
@affiliate_code = nil
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
if @delivery =~ /23/ #これはもう古い?
delivery = "23時間"
elsif @delivery =~ /2〜3日/ #これはもう古い?
delivery = "2〜3日"
elsif @delivery =~ /3日/
delivery = "3日"
elsif @delivery =~ /4〜20/ #これはもう古い?
delivery = "4〜20日"
elsif @delivery =~ /1〜3週間/
delivery = "7〜21日"
elsif @delivery =~ /3週間/
delivery = "21日"
elsif @delivery =~ /7〜14日/
delivery = "7〜14日"
elsif @delivery =~ /取寄/
delivery = "取寄"
else
delivery = "?"
end
end
else
message("WAR; maybe data-error, no-title.")
end
return delivery, flag
end
#===== ===== url ===== =====
def url_isbnsearch ( isbn = @isbn )
url_bibinfo(isbn)
end
def url_bibinfo ( id = @id )
id = @isbn if id.nil?
id = id.delete('-').upcase
url = @url_site + 'NewSkysoft/GetTitleDetail.asp?'
url << 'Userid=' + @affiliate_code + '&' if !@affiliate_code.nil?
url << "ISBN=#{id}"
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 => 'カテゴリー :',
:pubsize => '寸法 :', #??? 今は存在しない? その他の情報に統合?
:etc => 'その他の情報',
:desc => '内容紹介',
:none => '●'
# :none => '●'
}
mode = :none
data = Hash.new()
#----- check file ------
if str =~ /該当する書籍は見つかりません/s
return
end
#----- 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
}
#----- parse -----
@title = data[:title].to_s.sub(/本の詳細/,'').gsub(/<[^>]+>/,'').strip
if data[:genre] =~ //
@genre = $1.strip
end
if data[:image] =~ /').each { |line|
name = line.gsub(//,'').gsub(/<[^>]+>/,'').strip
if name =~ / 著$/
@author = name.sub(/ 著$/,'').sub(/ +$/,'').strip
elsif name =~ / 訳$/
@translator = name.sub(/ 訳$/,'').sub(/ +$/,'').strip
end
} unless data[:author].nil?
if data[:price] =~ /(.+?)<\/B>/
@price = $1.strip
end
if data[:point] =~ /(.+?)<\/B>/
@point = $1.strip
end
if data[:delivery] =~ /(.+?)<\/B>/
@delivery = $1.strip
@delivery.gsub!(/
/,'')
if @delivery =~ /:/
@stock, @delivery = $`.strip, $'.strip
end
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.strip
end
if data[:category] =~ /Category=([^"]+)/
@category_code = $1.strip
end
end
if !data[:pubsize].nil?
@pubsize = data[:pubsize].to_s.sub(/#{mode_tbl[:pubsize]}/s,'').gsub(/<[^>]+>/,'').strip
end
etc = data[:etc].to_s.sub(/#{mode_tbl[:etc]}/s,'').gsub(//,'').gsub(/<[^>]+>/,'').strip
if etc.size > 0
@etc = etc.gsub(/\s+/, ' ') .strip
if etc =~ /サイズ:(.+)/
@pubsize = $1.strip
if @pubsize =~ /\s(\d+P)/
@pubsize, @page = $`.strip, $1.strip
end
end
end
if !data[:desc].nil?
@desc = data[:desc].to_s.sub(/#{mode_tbl[:desc]}/s,'').gsub(/<[^>]+>/,'').strip.gsub(/^ +/,'').gsub(/ +$/,'').strip
end
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 ----- #amazon独自の情報類
@info["point"] = @point #ページプラスポイント
@info["category"] = @category #カテゴリー
@info["category_code"] = @category_code #カテゴリー番号
@info["etc"] = @etc #その他の情報
end
end
if __FILE__ == $0
p CacheBib_skysoft.new.get_data('4-15-010739-4')
end