トップ «前の日記(2007-10-01) 最新 次の日記(2007-10-03)» 編集

Pyon's Diary

[はてなブックマーク登録数] [Google に登録] [RSS フィード] Gourmet Hardware Programming Society Software
成る可くJIS X 0213:2004對應MSフォント(5.0)、IPAフォント(003.02)で御覽下さい

2007-10-02 舊 平成拾玖年丁亥葉月廿貳日己巳 (火・雨) [長年日記]

[節] tDiaryAmazon商品プレビューを使用する。

現在午前五時。蒲團の上で數時間轉がつてゐるのに全く寢付け無い。

仕方が無いので計算機の電源を入れて、tDiaryAmazon商品プレビューが使用出來無いかを調べた。

最初に 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 には五種類の形式が有る事が判つた。

tDiaryamazon.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.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}&amp;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}&amp;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/22UTF-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}&amp;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"}}

亦本家との差分が擴がつて了つた。

Tags: Programming Software | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] 晩御飯。

  • 押麥飯。
  • 揚げと長葱の味噌汁。
  • 根菜の煮物。
  • 韮、人參、榎茸の和へ物。
  • 納豆。
Tags: None | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink
[]

© pyon