.+?
.+?\(([^)]+?)\) <'m =~ response
end
#--------------------------------------------------
# Description
#--------------------------------------------------
if %r'レビュー
(.*)'mis =~ response then
review_scope = $1
end
# 何種類かあるみたい…
if %r"(出版社 ?/ ?著者からの内容紹介|メーカーより|作品内容|内容(「.+?」データベースより)) +
+ +(.+?) *<[pP]>"s =~ review_scope then
@writer =$1
@desc = $2
end
if %r!
(出版社 ?/ ?著者からの内容紹介|商品紹介|メーカーより|作品内容|内容(「.+?」データベースより))\n+
(.+?)(?:
...)?!mis =~ review_scope then
@writer =$1
@desc = $2
end
if @writer.to_s.empty? and @desc.to_s.empty? then
if %r"
(メーカーより|作品内容|内容紹介|出版社 ?/ ?著者からの内容紹介|内容(「.+?」データベースより)) +(.*)
(?:.*
)+"s =~ review_scope.to_s.gsub(/\n/,'') then
@writer =$1
@desc = $2
end
end
if @writer.to_s.empty? and @desc.to_s.empty? then
if %r"(作品内容|内容(「.+?」データベースより))
\n(.*?)"mis =~ review_scope then
@writer =$1
@desc = $2
end
end
if @writer.to_s.empty? and @desc.to_s.empty? then
if %r|(製品概要)[::](.*?)|mi =~ review_scope then
@writer = $1
@desc = $2
end
end
#--------------------------------------------------
# Published Date
#--------------------------------------------------
#(2002/05/24)
:DVD,CD
#発売日:2002/03/28
:PS2
if %r"(?:発売日[::]|\()([\d\/]+[\d])\)?
" =~ response then
@pubdate = $1
elsif %r|\((\d{4}\/[\d\/]+)\)| =~ response then
@pubdate = $1
end
if ! @actor.to_s.empty?
if %r'
出版社:(.+?)' =~ response
@maker = $1.gsub(/\(.+?\)/,"")
end
end
#--------------------------------------------------
# Size(ディスク枚数)
#--------------------------------------------------
if %r!(?:
)?ディスク枚数:(?:)?(.+)
! =~ response then
@size = $1.gsub(/[^\d]/,"")
elsif %r!サイズ\(cm\): ([^<]*)$! =~ response then
@size = $1
end
if @title.nil? then
read_cache
else
save_cache
@flag = true
end
end
end
class Filter
include Math
def add_title(str)
href_added_title = Array.new
str.split(",").each{|each_column|
if /href/ =~ each_column then
#a = each_column
unless %r!http://www.amazon.co.jp! =~ each_column then
each_column = each_column.gsub(/\/exec/,"http:\/\/www.amazon.co.jp\/exec")
end
column_str = each_column.scan(/>(.+?))[0].to_s
#c = "#{each_column.scan(/(
/)[0]} title=\"#{column_str}の作品\">#{column_str}#{each_column.scan(/(\(.+?\))/)[0].to_s}"
column_str_with_link = "#{each_column.scan(/(/)[0]} title=\"#{column_str}の作品\">#{column_str}#{each_column.scan(/(\(.+?\))/)[ column_str.count( '(' ) ].to_s}"
else
column_str_with_link = each_column
end
href_added_title << column_str_with_link
}
return href_added_title.join(",")
end
def amazon_shop(str, type)
tagend = (@diary.isXHTML ? ' />' : '>')
amazon_id = ''
expire = ''
no_img = 'No Image
'
noimage_retry_span = 0
product_link_title = "この <-Media> について"
if @diary.respond_to?('config') then
proxy = @diary.config['PROXY']
amazon_id = @diary.config['BOOKSTORE_AMAZON_ID'].to_s
expire = @diary.config['AMAZON_CACHE_EXPIRE'].to_s
no_img = @diary.config['NO_IMAGE_FILE'].to_s unless @diary.config['NO_IMAGE_FILE'].to_s.empty?
no_imgS = @diary.config['NO_IMAGE_FILE_S'].to_s unless @diary.config['NO_IMAGE_FILE_S'].to_s.empty?
media_icon = @diary.config['AMAZON_MEDIA_ICON']
noimage_retry_span = @diary.config['AMAZON_NOIMAGE_RETRY_SPAN'] unless @diary.config['AMAZON_NOIMAGE_RETRY_SPAN'].to_s.empty?
product_link_title = @diary.config['AMAZON_PRODUCT_LINK_STRING'] unless @diary.config['AMAZON_PRODUCT_LINK_STRING'].to_s.empty?
lightbox_use = @diary.config['AMAZON_LIGHTBOX_USE'] if ! @diary.config['AMAZON_LIGHTBOX_USE'].to_s.empty?
end
begin
case type
when :P, :UL, :DL
#str.gsub!(/[\((][@@](CD|DVD|PS|PS2|GC|XBOX|GBA|ASIN|ISBN)[::](.+)[\))]/mi){
#str.gsub!(/[\((][@@](CD|DVD|PS|PS2|GC|XBOX|GBA|ASIN|ISBN)[::](.+?)(\/.+?)?[\))]/mi){
str.gsub!(/\(@(CD|DVD|PS|PS2|PSP|GC|GBA|NDS|XBOX|ASIN|ISBN):(.+?)(\/.+?)?\)/i){
key = $1
code_id = $2
template_file = $3.to_s.gsub("/","")
amzshop = Amazon_shop::new
amzshop.cache_dir = @diary.logDirectory + 'amazon_shop'
amzshop.code_id = code_id
amzshop.key = key
amzshop.proxy = proxy
amzshop.diary_day = @diary.date
# キャッシュの有効日数
if expire.empty? then
amzshop.expire = 0
else
amzshop.expire = expire.to_i
end
if ! noimage_retry_span.to_s.empty?
amzshop.noimage_retry_span = noimage_retry_span.to_i
end
# テンプレート
template = ""
if /default/ !~ template_file then
if @diary.config['AMAZON_SHOP_TEMPLATE'] then
template_fp = amzshop.cache_dir + File::Separator + 'template'
if ! template_file.empty? then
template_fp = amzshop.cache_dir + File::Separator + template_file
if ! FileTest.exist?(template_fp) then
template_fp = amzshop.cache_dir + File::Separator + 'template'
end
end
if FileTest.exist?(template_fp) then
template = open(template_fp,"r").read
end
end
else
template = ""
end
title = body = img = desc = media = maker = actor = director = size = writer = desc = site = largeimage = asin = titlewithasin = pubdate = price = date_price_size = time = voice_spec = voice = caption = stand_in = screen_size = electro_spec = imgS = product_url = ap_banner =''
if /Not Found/ =~ amzshop.title then
print @diary.date.to_s
print "\tamazon_shop error.#{amzshop.title}\n"
return 1
end
if ! amzshop.title.nil?
product_title = amzshop.title unless amzshop.title.to_s.empty?
if /^(.+?)).to_s
end
title_tail = ""
=begin
http://www.amazon.co.jp/exec/obidos/redirect?path=ASIN/B000B8PG0K&tag=doublered-22
&camp=247&creative=1211
Raychell(レイチェル) 6段変速 折り畳み自転車 MF-206 シルバー 20インチ
=end
if ! amazon_id.empty? then
title_tail = "#{amazon_id}/ref=nosim"
end
product_url = "http://www.amazon.co.jp/exec/obidos/ASIN/#{amzshop.asin}/#{title_tail}"
if ! amzshop.media.to_s.empty?
media = amzshop.media
icon_prefix = "http://images-jp.amazon.com/images/G/09"
xbox_icon=%Q!
1 || imageM_h.to_i > 1) then
if /_P._SC/ =~ imageM then
imageM = imageM.gsub(/_P._SC/,"").gsub(/_\.jpg/,".jpg")
elsif /^(.+?)#{amzshop.asin}.+MZZZZZZZ_.jpg/ =~ imageM
#http://images-jp.amazon.com/images/P/B0006MQ1K0.09._PA10,0,0,20_PA15,0,0,30_PA20,0,0,40_PA25,0,0,50_PV5_SCMZZZZZZZ_.jpg
#4592137272.09._OU09_PE0_SCMZZZZZZZ_.jpg
imageM = $1.to_s + amzshop.asin + ".09.MZZZZZZZ.jpg"
end
variation = ""
base_extention_w = 0
base_extention_h = 0
rotate_angle = 90
if ! @diary.config['AMAZON_IMAGE_VARIATION'].to_s.empty?
variation = @diary.config['AMAZON_IMAGE_VARIATION']
variation.split("_").each{|param|
total_w = 0
total_h = 0
#_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_PU90_PF_SCMZZZZZZZ_.jpg
case param
when /^PA/ #ドロップシャドウ
param.gsub!(/^PA/,"")
arg1 = param.split(",")[0].to_i.abs # 余白ピクセルサイズ
arg2 = param.split(",")[1].to_i.abs # x 方向影ピクセルサイズ
arg3 = param.split(",")[2].to_i.abs # y 方向影ピクセルサイズ
arg4 = param.split(",")[3].to_i.abs # シャープさ加減
total_w = arg1 + arg2
total_h = arg1 + arg3
when /^PU/ # 左回転
param.gsub!(/^PU/,"")
arg1 = param.to_i
arg1 = 5 if arg1 == 0 # blank:5
rotate_angle += arg1
when /^PV/ # 右回転
param.gsub!(/^PV/,"")
arg1 = param.to_i
arg1 = 5 if arg1 == 0 # blank:5
rotate_angle -= arg1
end
base_extention_w += total_w
base_extention_h += total_h
}
end
imageS = imageM.gsub(/MZZZZZZZ.jpg/,"_AA50_SCMZZZZZZZ_.jpg")
imageL = imageM.gsub(/MZZZZZZZ.jpg/,"_SCLZZZZZZZ_.jpg") # M x 3.4
if ! variation.empty?
imageM = imageM.gsub(/MZZZZZZZ.jpg/,"#{variation}_SCMZZZZZZZ_.jpg")
end
imageL_title = "拡大イメージ(#{(imageM_w.to_f*3.4).to_i}x#{(imageM_h.to_f*3.4).to_i})"
# イメージバリエーション後のサイズ計算
imageM_w += base_extention_w
imageM_h += base_extention_h
rad = PI*(rotate_angle.to_f)/180.to_f
xdir = cos(rad).abs * imageM_h + sin(rad).abs * imageM_w
ydir = sin(rad).abs * imageM_h + cos(rad).abs * imageM_w
imageM_w = xdir
imageM_h = ydir
lightbox = ""
lightbox = %Q'rel="lightbox|#{product_url}|#{product_title}"' if lightbox_use.to_s
img = %Q'
'
end
if @diary.config['AMAZON_WITH_AP'] then
ap_banner = " ap:banner=\"#{imageS}\""
end
title = %Q'#{product_title}'
title = title.gsub(/<-Media>/,"#{amzshop.media}") unless media.to_s.empty?
# maker = メーカー
maker = add_title(amzshop.maker) unless amzshop.maker.to_s.empty?
# company = 販売元
company = amzshop.company unless amzshop.company.to_s.empty?
# actor = 出演者
actor = add_title(amzshop.actor) unless amzshop.actor.to_s.empty?
# director = 監督
director = add_title(amzshop.director) unless amzshop.director.to_s.empty?
# pubdate = 発売日
pubdate = amzshop.pubdate unless amzshop.pubdate.to_s.empty?
# price = 価格
price = amzshop.price.gsub(/¥/,'\\') unless amzshop.price.to_s.empty?
# size = 枚数 (CD,DVD)
size = amzshop.size.gsub(/ /,'') unless amzshop.size.to_s.empty?
# time = 再生時間 (CD,DVD)
time = amzshop.time unless amzshop.time.to_s.empty?
# desc = 内容記述
desc = amzshop.desc.gsub(/\/exec/,"http:\/\/www.amazon.co.jp\/exec") unless amzshop.desc.to_s.empty?
if /
/i,"")
end
# writer = desc のライター(「DVD NAVIGATOR」データベースより ...など)
writer = amzshop.writer unless amzshop.writer.to_s.empty?
# site = obsolete (google とかだった)
site =amzshop.site unless amzshop.site.to_s.empty?
# voice = 音声(英語/日本語 ...など)
voice = amzshop.voice unless amzshop.voice.to_s.empty?
# voice_spec = 音声仕様 (Dolby Digital 5.1/Dolby Digital 5.1 ...など)
voice_spec = amzshop.voice_spec unless amzshop.voice_spec.to_s.empty?
# caption = 字幕 (日本語/英語/日本語吹き替え用字幕 ...など)
caption = amzshop.caption unless amzshop.caption.to_s.empty?
# stand_in = 吹き替え
stand_in = amzshop.stand_in unless amzshop.stand_in.to_s.empty?
# screen_size = 画面サイズ (シネマスコープ ...など)
screen_size = amzshop.screen_size unless amzshop.screen_size.to_s.empty?
# electro_spec = エレクトロニクススペック
electro_spec = amzshop.electro_spec unless amzshop.electro_spec.to_s.empty?
# edition = エディション
edition = amzshop.edition unless amzshop.edition.to_s.empty?
if desc.size > 100 then
desc.gsub!(/(.{100}.+?)
.*/mi){
$1 + %Q'(...)'
}
end
if electro_spec.size > 100 then
electro_spec.gsub!(/.+?(.+?.+?.+?).*/mi){
$1 + %Q'(...)'
}
end
info_hash = {
"商品タイトル" => title,
"出演者/著者" => actor,
"メーカー" => maker,
"販売元" => company,
"枚数/サイズ" => size,
"発売日" => pubdate,
"価格" => price,
"解説" => desc,
"解説者" => writer,
"画像" => img,
"小画像" => imgS,
"メディア" => media,
"監督" => director,
"再生時間" => time,
"音声" => voice,
"音声仕様" => voice_spec,
"字幕" => caption,
"吹替え" => stand_in,
"スクリーンサイズ" => screen_size,
"スペック" => electro_spec,
"キー" => key,
"エディション" => edition,
"コード" => code_id
}
if /本|洋書/ =~ media then
makerStr = "出版社"
actorStr = "著者"
sizeStr = "サイズ"
sizeUnit = " cm"
else
if /CD/ =~ media then
makerStr = "アーティスト"
else
makerStr = "メーカー"
end
actorStr = "出演者"
sizeStr = "枚数"
sizeUnit = " 枚"
end
body = Array.new
if ! template.empty? then
template.tosjis.each{|line|
unless /^#/ =~ line then
line.gsub!(/(\[.+?\])/){
eval_str = $1
hash_key, before, after = eval eval_str
hash_item = info_hash[hash_key]
before + hash_item + after unless hash_item.to_s.empty?
}
line.gsub!(/<-makerStr>/,makerStr)
line.gsub!(/<-actorStr>/,actorStr)
line.gsub!(/<-sizeStr>/,sizeStr)
line.gsub!(/<-sizeUnit>/,sizeUnit)
line.chop!
body << line if ! line.empty?
end
}
else
media = "#{edition}" if ! edition.to_s.empty?
body << ""
body << %Q!\t!
body << %Q!\t
!
body << "\t"
body << "\t\t| "
body << "\t\t\t#{img}"
body << "\t\t | "
body << "\t\t"
body << "\t\t\t『#{title}』"
body << "\t\t\t#{media}#{@diary.tag_br}"
body << "\t\t\t#{maker}#{@diary.tag_br}" unless maker.empty?
body << "\t\t\t#{company}#{@diary.tag_br}" unless company.to_s.empty?
body << "\t\t\t#{actorStr}:#{actor}#{@diary.tag_br}" unless actor.empty?
body << "\t\t\t監督:#{director}#{@diary.tag_br}" unless director.empty?
date_price_size_time = Array.new
date_price_size_time << "発売日:" + pubdate unless pubdate.to_s.empty?
date_price_size_time << "価格:" + price unless price.to_s.empty?
date_price_size_time << sizeStr + ":" + size + sizeUnit unless size.to_s.empty?
date_price_size_time << "時間:" + time unless time.to_s.empty?
dpst = date_price_size_time.join(", ")
body << "\t\t\t#{dpst}#{@diary.tag_br}#{@diary.tag_br}" unless dpst.empty?
body << "\t\t\t音声:#{voice}#{@diary.tag_br}" unless voice.empty?
body << "\t\t\t音声仕様:#{voice_spec}#{@diary.tag_br}" unless voice_spec.empty?
body << "\t\t\t字幕:#{caption}#{@diary.tag_br}" unless caption.empty?
body << "\t\t\t吹き替え:#{stand_in}#{@diary.tag_br}" unless stand_in.empty?
body << "\t\t\t画面サイズ:#{screen_size}#{@diary.tag_br}" unless screen_size.empty?
body << "\t\t\t" unless electro_spec.empty?
body << "\t\t\t--#{writer}--#{@diary.tag_br}" unless writer.empty?
body << "\t\t\t#{desc}#{@diary.tag_br}" unless desc.empty?
body << "\t\t | "
body << "\t
"
body << "\t
"
body << ""
end
body << "\t"
body << "\t"
body << "\t
" if template.empty?
body << ""
end
body.join("\r\r").to_s.gsub(/&field/,"%26field").gsub(/^ +\n/m,"")
}
when :HTML
str.gsub!("\r\r","\n")
str.gsub!(/
\s*<\/p>/mi, '')
end
rescue
puts "#{$!}"
end
end
end
=begin
Local Variables:
mode: ruby
coding: japanese-shift-jis-dos
End:
=end