#!/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