# $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 << 'amazon ' 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 << '[TITLE]' } 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 = '
(ISBN:' t << 'amazon/' t << 'bk1)
' t << '' t << '[TITLE]' } 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