Pyon's Diary
2007-10-02 舊 平成拾玖年丁亥葉月廿貳日己巳 (火・雨) [長年日記]
tDiary で Amazon の商品プレビューを使用する。
現在午前五時。蒲團の上で數時間轉がつてゐるのに全く寢付け無い。
仕方が無いので計算機の電源を入れて、tDiary で Amazon の商品プレビューが使用出來無いかを調べた。
最初に Google で「tdiary amazon 商品プレビュー」を檢索すると以下の頁が見附かつた。
此處に有る amazon_preview.zip を落として來て解凍し、得られた amazon_preview.rb を core/plugin ディレクトリに抛り込むと、フッタ領域の直前に商品プレビュー用のコードが插入された。
然し上記頁にも書いて有る通り、此乃コードは amazon.rb が生成するテキストリンクには作用し無い。百萬人の煩惱生活では、
http://www.amazon.co.jp/o/ASIN/[アマゾン商品コード]/[アソシエイトID]/
で無いと駄目だと書いて有るが、他に無いのか商品プレビューのコードを調べてみた。
商品プレビューのコードでは、
http://www.assoc-amazon.jp/s/link-enhancer?tag=[アソシエイトID]&o=9
が指す JavaScript を讀込んでゐる。ぢやあ其乃中身を觀てみると、
http://www.assoc-amazon.jp/s/link-enhancer-common.js
と云ふ JavaScript を讀込む樣に成つてゐた。で當然の如く其れを開いてみると、商品プレビューのコードが作用する URL には五種類の形式が有る事が判つた。
tDiary の amazon.rb プラグインは商品の URI を Amazon Web サービスを利用して取得してゐて、戻り XML の中の DetailPageURL タグの値を使用してゐる。其乃 URI の形式はキャッシュファイルを確認すると、
http://www.amazon.co.jp/gp/redirect.html?ASIN=[商品コード]&tag=[アソシエイトID]&lcode=###&cID=####&ccmID=######&location=/o/ASIN/[商品コード]%3FSubscriptionId=####################
と成つてゐた。要は此を個別商品リンク(テキスト)と同じ形式、
http://www.amazon.co.jp/gp/product/[商品コード]?ie=UTF8&tag=[アソシエイトID]&linkCode=###&camp=###&creative=###&creativeASIN=[商品コード]
と同じに成る樣に變換してやれば良い。だが商品プレビューの JavaScript を讀んで一寸實驗して觀た所、
http://www.amazon.co.jp/gp/product/[商品コード]?tag=[アソシエイトID]
で有れば商品プレビューは有効に成る模樣。
amazon.rb を改造する。
此等を考慮して次の方針で amazon.rb を改造する事にした。
- amazon_previre.rb を amazon.rb に取り込む。
- amazon.rb#amazon_url が返す URI を商品プレビューの JavaScript が解釋出來る樣に變更する。
上記に基づいて変更した amazon.rb (Rev 1.64) との差分を以下に示す。
@@ -7,6 +7,7 @@
#
require 'open-uri'
require 'timeout'
+require 'uri'
require 'rexml/document'
# do not change these variables
@@ -83,7 +84,11 @@
end
def amazon_url( item )
- item.elements.to_a( 'DetailPageURL' )[0].text
+ asin = item.elements.to_a( 'ASIN' )[0].text
+ uri = URI::parse(item.elements.to_a( 'DetailPageURL' )[0].text)
+ uri.path = '/gp/product/' + asin + '/'
+ uri.query = 'tag=' + @conf['amazon.aid']
+ uri.to_s
end
def amazon_label( item )
@@ -316,3 +321,18 @@
alias isbnImgRight isbn_image_right
alias isbnImg isbn_image
alias amazon isbn_image
+
+# Imported from http://different-view.jp/~vette/108/amazon_preview.rb.html
+add_footer_proc do
+ aid = @conf['amazon.aid'] || ''
+ if not aid.empty? and not @cgi.mobile_agent? then
+ <<-SCRIPT
+<!-- ********** Amazon Item Preview ******************** -->
+<script type="text/javascript" src="http://www.assoc-amazon.jp/s/link-enhancer?tag=#{aid}&o=9"></script>
+<noscript><div><img src="http://www.assoc-amazon.jp/s/noscript?tag=#{aid}" alt="" /></div></noscript>
+<!-- ********** Amazon Item Preview ******************** -->
+ SCRIPT
+ else
+ ''
+ end
+end
此で商品プレビューが効く樣に成つた。
追記: オプションで有効/無効にする。
tdiary.conf にオプションを追加して、
@options['amazon.preview'] = true
としたら商品プレビューが効く樣にしてみた。以下は其れと amazon.rb (Rev 1.64) との差分。
@@ -7,6 +7,7 @@
#
require 'open-uri'
require 'timeout'
+require 'uri'
require 'rexml/document'
# do not change these variables
@@ -83,7 +84,15 @@
end
def amazon_url( item )
- item.elements.to_a( 'DetailPageURL' )[0].text
+ if not @conf['amazon.preview'] then
+ item.elements.to_a( 'DetailPageURL' )[0].text
+ else
+ asin = item.elements.to_a( 'ASIN' )[0].text
+ uri = URI::parse(item.elements.to_a( 'DetailPageURL' )[0].text)
+ uri.path = '/gp/product/' + asin + '/'
+ uri.query = 'tag=' + @conf['amazon.aid']
+ uri.to_s
+ end
end
def amazon_label( item )
@@ -316,3 +325,18 @@
alias isbnImgRight isbn_image_right
alias isbnImg isbn_image
alias amazon isbn_image
+
+# Imported from http://different-view.jp/~vette/108/amazon_preview.rb.html
+add_footer_proc do
+ aid = @conf['amazon.aid'] || ''
+ if @conf['amazon.preview'] and not aid.empty? and not @cgi.mobile_agent? then
+ <<-SCRIPT
+<!-- ********** Amazon Item Preview ******************** -->
+<script type="text/javascript" src="http://www.assoc-amazon.jp/s/link-enhancer?tag=#{aid}&o=9"></script>
+<noscript><div><img src="http://www.assoc-amazon.jp/s/noscript?tag=#{aid}" alt="" /></div></noscript>
+<!-- ********** Amazon Item Preview ******************** -->
+ SCRIPT
+ else
+ ''
+ end
+end
Amazon Web サービスが返す商品詳細頁の URI に商品プレビューが對應して呉れゝば、斯樣な事はし無くて濟むのだが。
處で現在午前八時。きのふ行つて無いし、此乃儘寢ずに仕事に行かなきや。
追記: 設定畫面で切り換へ可能に。(2007-11-03)
商品プレビュー機能を使用する/しないを設定畫面で切り換へ出來る樣に變更した。
以下に差分を示す。リビジョン番號が長いのは新暦 2007/10/22 に UTF-8 版の tDiary に切り換へた爲。
plugin/amazon.rb (Rev.1.48.2.14) との差分。
@@ -7,6 +7,7 @@
#
require 'open-uri'
require 'timeout'
+require 'uri'
require 'rexml/document'
# do not change these variables
@@ -83,7 +84,15 @@
end
def amazon_url( item )
- item.elements.to_a( 'DetailPageURL' )[0].text
+ if not @conf['amazon.preview'] then
+ item.elements.to_a( 'DetailPageURL' )[0].text
+ else
+ asin = item.elements.to_a( 'ASIN' )[0].text
+ uri = URI::parse(item.elements.to_a( 'DetailPageURL' )[0].text)
+ uri.path = '/gp/product/' + asin + '/'
+ uri.query = 'tag=' + @conf['amazon.aid']
+ uri.to_s
+ end
end
def amazon_label( item )
@@ -248,6 +257,8 @@
end
end
end
+
+ @conf['amazon.preview'] = (@cgi.params['amazon.preview'][0] == 'true')
end
unless @conf['amazon.hideconf'] then
@conf['amazon.aid'] = @cgi.params['amazon.aid'][0]
@@ -278,6 +289,8 @@
</select></p>
<h3>#{@amazon_label_clearcache}</h3>
<p><label for="amazon.clearcache"><input type="checkbox" id="amazon.clearcache" name="amazon.clearcache" value="true">#{@amazon_label_clearcache_desc}</label></p>
+ <h3>#{@amazon_label_preview}</h3>
+ <p><label for="amazon.preview"><input type="checkbox" id="amazon.preview" name="amazon.preview" value="true"#{" checked" if @conf['amazon.preview']}>#{@amazon_label_preview_desc}</label></p>
HTML
end
end
@@ -316,3 +329,18 @@
alias isbnImgRight isbn_image_right
alias isbnImg isbn_image
alias amazon isbn_image
+
+# Imported from http://different-view.jp/~vette/108/amazon_preview.rb.html
+add_footer_proc do
+ aid = @conf['amazon.aid'] || ''
+ if @conf['amazon.preview'] and not aid.empty? and not @cgi.mobile_agent? then
+ <<-SCRIPT
+<!-- ********** Amazon Item Preview ******************** -->
+<script type="text/javascript" src="http://www.assoc-amazon.jp/s/link-enhancer?tag=#{aid}&o=9"></script>
+<noscript><div><img src="http://www.assoc-amazon.jp/s/noscript?tag=#{aid}" alt="" /></div></noscript>
+<!-- ********** Amazon Item Preview ******************** -->
+ SCRIPT
+ else
+ ''
+ end
+end
plugin/en/amazon.rb (1.11.2.2) との差分。
@@ -61,3 +61,5 @@ @amazon_label_usedefault = 'Use default image' @amazon_label_clearcache = 'Clear Cache' @amazon_label_clearcache_desc = 'Delete local cache file about book images' +@amazon_label_preview = 'Use Preview' +@amazon_label_preview_desc = 'Check if preview is used'
plugin/ja/amazon.rb (1.11.2.3) との差分。
@@ -77,3 +77,5 @@ @amazon_label_usedefault = 'デフォルトのイメージを使う' @amazon_label_clearcache = 'キャッシュの削除' @amazon_label_clearcache_desc = 'イメージ関連情報のキャッシュを削除する(Amazon上の表示と矛盾がある場合に試して下さい)' +@amazon_label_preview = '商品プレビューを使う' +@amazon_label_preview_desc = '商品プレビュー機能を使う場合はチェックして下さい'
plugin/zh/amazon.rb (1.6.2.2) との差分。
@@ -61,3 +61,5 @@ @amazon_label_usedefault = 'Use default image' @amazon_label_clearcache = 'Clear Cache' @amazon_label_clearcache_desc = 'Delete local cache file about book images' +@amazon_label_preview = 'Use Preview' +@amazon_label_preview_desc = 'Check if preview is used'
固めたものを以下の場處に置いた。
* {{tlink "/depot/tdiary/amazon.tar.gz", "amazon.tar.gz"}}
亦本家との差分が擴がつて了つた。