#!/usr/local/bin/ruby
# amazon.rb
# ISBN-search -> detail-parse
# original; isbn2bib.rb for bk1 by takahashi
# amazon.rb for amazon by not
# ver.0.4 2002.3.21-2003.1.20
# ver.0.5 2003.5.20-2003.5.22
# ver.0.6 2003.11.10 adult対応
# ver.0.6a 2003.11.28 出版社情報の取り方修正
# ver.0.7 2003.12.22-2004.01.07 新cacheに変更
# ver.0.7a 2004.03.31 初動時imageを拾えてないのを修正
# ver.0.7b 2004.04.06 「4〜6週間」を拾えてないのを修正
#一部のお薦め(この商品に興味がある人は……でないのもの)等のデコードがまだ。
#descに文中リンクがある場合に未対応。今は除去してしまっている。
if __FILE__ == $0
require 'cookie'
require 'webagent'
require 'cache'
require 'cachebib'
end
class CacheBib_amazon < CacheBib
begin
require 'iconv'
rescue LoadError
begin
require 'uconv'
rescue LoadError
end
end
attr_accessor :series_num, :limage, :edition, :recommend, :ranking
def initialize ()
super
@shop_id = 'amz'
@url_site = 'http://www.amazon.co.jp/'
@affiliate_code = 'ipposjunkbox-22'
@reviews = Array.new()
@flag_review = true
@adult_check = 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
if @delivery =~ /24/
delivery = "24時間"
elsif @delivery =~ /2/
delivery = "2日"
elsif @delivery =~ /3/
delivery = "2〜3日"
elsif @delivery =~ /取/
delivery = "取寄せ"
elsif @delivery =~ /1〜2週間/
delivery = "1〜2週間"
elsif @delivery =~ /4〜6週間/
delivery = "4〜6週間"
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 + "exec/obidos/ASIN/#{id}"
url << "/ref_#{affiliate_code}" unless @affiliate_code.nil?
url << '?val=authorized' unless @adult_check.nil?
return url
end
#キーワード検索主体。そのうち別途詳細検索用を用意した方がいいか?
def url_search ( srch = 1, kywd = nil, codes = {}, aid = @affiliate_code )
if !kywd.nil?
begin
kywd = kywd.toeuc
kywd = Iconv::iconv("UTF-8", "EUC-JP", kywd).to_s
rescue NameError
begin
kywd = CGI::escape(kywd.toutf8)
rescue
end
end
end
url = @url_site + "exec/obidos/external-search/?"
url << "tag=#{affiliate_code}&" unless @affiliate_code.nil?
url << "keyword=#{kywd}"
return url
end
#===== ===== parse ===== =====
def parse_bibinfo ( str )
@id = @isbn.delete('-').upcase if @id.nil?
#----- parse ----- #???keyできりわけてからparseする方法にそのうち変更???
# if %r|本のデータ: (.+?)|s =~ str
if %r|Amazon.co.jp:(.+?)|sm =~ str
@title = $1.strip.gsub(/^本:/s,'').strip
end
if %r|シリーズ番号: (.+?)\n|s =~ str
@series_num = $1
end
if %r|(.+?
)| =~ str
authors = $1.split(/(.+?)| =~ line
name = $1
if line =~ /\(著\)/
if @author.nil? then @author = '' else @author << "\t" end
@author << name
elsif line =~ /\(原著\)/
if @e_author.nil? then @e_author = '' else @e_author << "\t" end
@e_author << name
elsif line =~ /\(翻訳\)/
if @translator.nil? then @translator = '' else @translator << "\t" end
@translator << name
end
end
}
end
if %r|.+? (.+?)| =~ str
@series = $1.gsub(/ /,'').strip
end #???label???
if %r|
(¥[\d,]+)|mis =~ str
@price = $1.strip
end
if %r|発送可能時期:([^<]*?)
|mis =~ str
@delivery = $1.strip
end
if %r|エディション:([^<]*?)
|mis =~ str
@edition = $1.strip
end
if %r|この商品に興味がある人は、こんな商品にも興味をもっています.+?
/i, "\t").gsub(/<[^>]+>/i, '').strip end #時々文中リンクがあるが、今は除く if %r|目次(.+?)