# $Id: bookstore.rb,v 1.4 2001/01/01 17:39:43 not Exp $
# 2001.6.?15 修正# 2001.11.12 修正# 2002.3.17 修正# 2002.4.5 修正
# 2002.4.7 修正# 2002.4.8 修正# 2003.2.7-2003.2.14 修正
=begin
usage:
(ISBN4-04-873259-5) とか書いとくと各オンライン書店へのリンクに変換
松下さん(http://www.alles.or.jp/~akihisa/)のオンライン書店へのリンクを
参考に作成。
その後、細井さん(http://www.fan.gr.jp/~hosoi/diary/diary.html)による洋書
のリンクを追加。
アソシエイト・プログラムその他に参加している場合は ndiary.conf に以下の行を追加
もちろん自分の ID に直して。
もしくは、直接ソース冒頭あたりを修正。→50行目あたり
# bk1
BOOKSTORE_BK1_ID = 'p-not00114'
# amazon
BOOKSTORE_AMAZON_ID = 'notsfragmen-22'
# review-link(書評リンク)
REVIEWER_CODE = '一歩'
REVIEWLINK_LINK = true #書店リンクのうちに書評リンクも含める
で、てけとーに私がいじってるわけですな。
=end
require '../../ruby/simpleuri'
require '../../ruby/webagent'
require '../../ruby/cache'
require '../../ruby/amazon'
require '../../ruby/bk1'
require '../../ruby/esbooks'
require '../../ruby/asahiya'
require '../../ruby/jbook'
require '../../ruby/kinokuniya'
require '../../ruby/skysoft'
require '../../ruby/rcom'
class Filter
# BOOKSTORE = Regexp::compile(/[\((]ISBN(\d-[\d-]{9}-\w)[\))]/)
BOOKSTORE = Regexp::compile(/[\((]ISBN[:|:]?\s?(\d-[\d-]{9}[-]?[\w]?)[\))]/)
AMAZONIMAGE = Regexp::compile(/[\((]IMAGE[:|:]?\s?(\d-[\d-]{9}[-]?[\w]?)[\))]/)
AMAZONIMAGE2 = Regexp::compile(/[\((]IMAGE2[:|:]?\s?(\d-[\d-]{9}[-]?[\w]?)[\))]/)
TITLE = Regexp::compile(/[\((]TITLE[:|:|\s]?(.+)[\))]/)
def bookstore_x(str, type)
aid = @diary.config['BOOKSTORE_BK1_ID'].to_s
asid = @diary.config['BOOKSTORE_AMAZON_ID'].to_s
reviewer_code = @diary.config['REVIEWER_CODE'].to_s
flag_reviewlinklink = @diary.config['REVIEWLINK_LINK']
flag_rl_url = @diary.config['PARAGRAPH_ANCHOR']
aid = 'aid=' + aid + '&' unless aid.empty?
asid = '/' + asid unless asid.empty?
reviewlink_url = 'http://ippo.s5.xrea.com/x/rl/index.cgi'
=begin
#あるいは、ndiary.confを触るのが好みでない場合、ここで直接定義して下さい。
aid = 'aid=p-ippo00145&'
asid = '/ipposjunkbox-22'
reviewer_code = '一歩'
flag_reviewlinklink = true
=end
expire = 12
flag_net = @diary.config['nonet']
case type
when :P, :UL, :DL
str.gsub!(BOOKSTORE){
t = ''
isbn1 = $1
isbn2 = isbn1.delete('-')
checkbook = CacheBib.new()
newisbn = checkbook.isbn_check(isbn1)
t << "Warrning; ISBN-error; #{isbn1} -> #{newisbn}\n" if newisbn != isbn1
$stderr.puts "WAR; ISBN-error; #{isbn1} -> #{newisbn}" if newisbn != isbn1
isbn1 = newisbn
$stderr.puts "CHK; ISBN; #{isbn1}"
rl_str = []
rl_str << "ISBN#{isbn1}"
rl_str << "reviewer=#{reviewer_code}" unless reviewer_code.empty?
rl_str = rl_str.join(":")
$stderr.puts 'CHK; reviewlink; ' + rl_str
rl_str = ''
store = []
info = {}
newstr = ''
book = CacheBib_amazon.new()
book.expire = expire
book.cache_dir = ("../../bookcache/amz")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if !info["image"].nil?
t << ' '
end
if flag
newstr << 'Amazon '+ delivery + ''
end
if !info["reviews"].nil?
newstr << "Amazon" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
ainfo = info
newstr = ''
book = CacheBib_bk1.new()
book.expire = expire
book.cache_dir = ("../../bookcache/bk1")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << 'bk1 '+ delivery + ''
end
if !info["image"].nil?
newstr << "bk1" if newstr.size == 0
newstr << " 絵"
end
if !info["reviews"].nil?
newstr << "bk1" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
binfo = info
newstr = ''
book = CacheBib_esbooks.new()
book.expire = expire
book.cache_dir = ("../../bookcache/esb")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << 'eS! '+ delivery + ''
end
if !info["image"].nil?
newstr << "eS!" if newstr.size == 0
newstr << " 絵"
end
if !info["reviews"].nil?
newstr << "eS!" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
einfo = info
newstr = ''
book = CacheBib_asahiya.new()
book.expire = expire
book.cache_dir = ("../../bookcache/ash")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << '旭屋 '+ delivery + ''
end
if !info["image"].nil?
newstr << "旭屋" if newstr.size == 0
newstr << " 絵"
end
if !info["reviews"].nil?
newstr << "旭屋" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
sinfo = info
newstr = ''
book = CacheBib_jbook.new()
book.expire = expire
book.cache_dir = ("../../bookcache/jbk")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << 'Jbook '+ delivery + ''
end
if !info["image"].nil?
newstr << "Jbook" if newstr.size == 0
newstr << " 絵"
end
if !info["reviews"].nil?
newstr << "Jbook" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
jinfo = info
newstr = ''
book = CacheBib_kinokuniya.new()
book.expire = expire
book.cache_dir = ("../../bookcache/kin")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << '紀伊国屋 '+ delivery + ''
end
if !info["image"].nil?
newstr << "紀伊国屋" if newstr.size == 0
newstr << " 絵"
end
if !info["reviews"].nil?
newstr << "紀伊国屋" if newstr.size == 0
newstr << ' ' + info["reviews"].size.to_s + "評"
end
store << newstr if newstr.size > 0
kinfo = info
newstr = ''
book = CacheBib_skysoft.new()
book.expire = expire
book.cache_dir = ("../../bookcache/sky")
info = book.get_data(isbn1, flag_net)
delivery, flag = book.word_delivery
if flag
newstr << 'sky '+ delivery + ''
end
if !info["image"].nil?
newstr << "sky" if newstr.size == 0
newstr << " 絵"
end
store << newstr if newstr.size > 0
yinfo = info
isbn = isbn1
info = checkbook.merge_info( [ainfo, binfo, einfo, sinfo, jinfo, kinfo, yinfo] )
info["isbn"] = isbn
newstr = ''
book = CacheBib_rcom.new()
book.expire = expire
book.cache_dir = ("../../bookcache/rcm")
info = book.get_data(isbn1, true)
if !info["url"].nil?
newstr << '読共'
end
store << newstr if newstr.size > 0
rinfo = info
if flag_reviewlinklink
newurl = "#{reviewlink_url}?cmd=book&code=ISBN#{isbn2.upcase}"
# newurl << URI.escape(Kconv.toeuc("&reviewer=#{reviewer_code}")) unless reviewer_code.empty?
newurl << URI.escape("&reviewer=#{reviewer_code}".toeuc) unless reviewer_code.empty?
#$stderr.puts $KCODE
#orgkcode = $KCODE.to_s
#$KCODE = 'EUC'
#$stderr.puts Kconv.tosjis((Kconv.toeuc(reviewer_code))) unless reviewer_code.empty?
#$stderr.puts URI.escape(Kconv.toeuc(reviewer_code)) unless reviewer_code.empty?
#$stderr.puts URI.escape(Kconv.tosjis(reviewer_code)) unless reviewer_code.empty?
$stderr.puts URI.escape("一歩".toeuc) unless reviewer_code.empty?
#$KCODE = orgkcode
#$stderr.puts $KCODE
store << "rl"
# store << "rl"
end
isbn = isbn1
info = checkbook.merge_info( [ainfo, binfo, einfo, sinfo, jinfo, kinfo, yinfo] )
info["isbn"] = isbn
t << rl_str
t << ''
t << "【 " + store.join(" / ") + " 】\n" if store.size > 0
t << "題:" + info["title"] + "\n" if !info["title"].nil?
t << "著:" + info["author"] + "\n" if !info["author"].nil?
t << "訳:" + info["translator"] + "\n" if !info["translator"].nil?
t << "符:ISBN" + info["isbn"] + "\n" if !info["isbn"].nil?
t << "刊:" + info["publisher"] + "\n" if !info["publisher"].nil?
t << "年:" + info["pubdate"] + "\n" if !info["publisher"].nil?
t << "型:" + info["size"] + "\n" if !info["size"].nil?
t << "標:" + info["series"] + "\n" if !info["series"].nil?
t << "値:" + info["price"] + "\n" if !info["price"].nil?
t << "文:" + info["desc"] + "\n" if !info["desc"].nil?
t << ''
if isbn2 =~ /^4/
=begin
t << '【 '
# t << 'amazon / '
# t << 'bk1 / '
t << 'ISIZE? / '
# t << '旭屋 / '
# t << 'Jbook / '
# t << '紀伊國屋 / '
# t << 'eS! / '
t << '本屋さん? :search-ISBN 】'
=end
t << ''
elsif isbn2 =~ /^0/
t = rl_str
t << '【 '
t << 'amazon / '
t << 'skysoft / '
t << 'amazon.com / '
t << 'Barnes & Noble / '
t << 'A1Books / '
t << 'Powells.com / '
t << 'Borders / '
t << '紀伊國屋 / '
t << '丸善 】'
elsif isbn2~ /^1/
t = rl_str
t << '【 '
t << 'amazon.co.uk / '
t << 'The Internet Bookshop 】'
end
}
str.gsub!(AMAZONIMAGE){
isbn = $1
isbn2 = isbn.delete('-')
t = ''
check = 11 - ((((isbn2[0] - 48) * 10) + ((isbn2[1] - 48) * 9) + ((isbn2[2] - 48) * 8) + ((isbn2[3] - 48) * 7) + ((isbn2[4] - 48) * 6) + ((isbn2[5] - 48) * 5) + ((isbn2[6] - 48) * 4) + ((isbn2[7] - 48) * 3) + ((isbn2[8] - 48) * 2)) % 11)
digit = check.to_s
digit = 'X' if check == 10
digit = '0' if check == 11
if isbn2.size < 10 then
$stderr.puts "Warning: ISBN check-digit lost. -> #{digit}"
test = (isbn2[0]).to_s
isbn2 = isbn2 + digit
if isbn =~ /-$/ then
isbn = isbn + digit
else
isbn = isbn + "-" + digit
end
else
check = (isbn2[9] - 48).to_s
check = 'X' if (isbn2[9] == 'X') || (isbn2[9] == 'x')
if (check !~ digit) && ( check != '40') then
$stderr.puts "Warning: ISBN check-digit error. #{check} -> #{digit}"
t << "Warning ISBN check-digit error\n"
isbn2[9] = digit
isbn.gsub!(/-.$/,"-#{digit}")
end
end
t = ''
t << '
'
}
str.gsub!(AMAZONIMAGE2){
isbn = $1
isbn2 = isbn.delete('-')
t = ''
check = 11 - ((((isbn2[0] - 48) * 10) + ((isbn2[1] - 48) * 9) + ((isbn2[2] - 48) * 8) + ((isbn2[3] - 48) * 7) + ((isbn2[4] - 48) * 6) + ((isbn2[5] - 48) * 5) + ((isbn2[6] - 48) * 4) + ((isbn2[7] - 48) * 3) + ((isbn2[8] - 48) * 2)) % 11)
digit = check.to_s
digit = 'X' if check == 10
digit = '0' if check == 11
if isbn2.size < 10 then
$stderr.puts "Warning: ISBN check-digit lost. -> #{digit}"
test = (isbn2[0]).to_s
isbn2 = isbn2 + digit
if isbn =~ /-$/ then
isbn = isbn + digit
else
isbn = isbn + "-" + digit
end
else
check = (isbn2[9] - 48).to_s
check = 'X' if (isbn2[9] == 'X') || (isbn2[9] == 'x')
if (check !~ digit) && ( check != '40') then
$stderr.puts "Warning: ISBN check-digit error. #{check} -> #{digit}"
t << "Warning ISBN check-digit error\n"
isbn2[9] = digit
isbn.gsub!(/-.$/,"-#{digit}")
end
end
t = '
'
}
str.gsub!(TITLE){
num="50"
eucst=CGI::escape($1.kconv(2))
sjisst=CGI::escape($1.kconv(3))
t = '【 ' + $1 + ' : '
t << 'bk1 /'
t << 'Jbook /'
t << 'isize /'
t << '旭屋 /'
t << '紀伊国屋/ '
t << 'books'
t << '】'
}
when :AFTER_P, :AFTER_UL, :AFTER_DL
if flag_rl_url
str.gsub!(//) {
tagcode = $1
if str =~ //
urlcode = $1
$stderr.puts 'CHK; reviewlink; ' + urlcode
tagcode += ':url=' + urlcode
end
t = ""
}
end
end
end
end