右クリックで Amazon アソシエイト 「なか見! 検索」対応版

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] アマゾンで始まったばかりの「なか見! 検索」を手軽に利用できるように、「右クリックで Amazon アソシエイト」を改造してみました。
[キーワード] アマゾン,中身,中味,中見,なかみ

« INTERNET magazine 12月号 「ブログ進化系」 | トップページ | 2005年11月期 テレビ番組チェック表 »

2005.11.02

右クリックで Amazon アソシエイト 「なか見! 検索」対応版

最終更新: 2006年1月23日

アマゾンが「なか見! 検索」に対応したのを受けて、「右クリックで Amazonアソシエイト」を改造し、「なか見! 検索」に対応させてみました。(ネタ元: tDiary 用 Amazon なか見!プラグイン)

「なか見!検索」は欲しいと思っているまさにその本を、全文検索で探し出すことができる、画期的な検索機能です。

なか見!検索とは?

実際に「なか見! 検索」が使える書籍・雑誌はまだ限られていますので、「なか見! 検索」のリンクをクリックしても必ずしも、当該書籍・雑誌の中身が見える訳ではありません。「なか見! 検索」に対応している書籍・雑誌かどうか判断して、リンクを付ける・付けないを自動選択するようにした方がいいのですが、とりあえず、今回作った版は、「なか見! 検索」対応かどうかに関係なく、一律にリンクを付けるようにしています。

使用例

商品名と書影だけを表示するパターンと、引用付きで商品名と書影を表示するパターンの例をそれぞれ示します。

[図解]スピード・ノート
[図解]スピード・ノート
(なか見! 検索)

包装紙、広告チラシ、雑誌、新聞紙、いらなくなった紙がステキに変身! バッグからアクセサリー、ステーショナリーまで、切って、貼って、折って…。紙だからとっても簡単! 初めての人にもできるプロセス写真で詳しく解説。

身近な紙でできる―おしゃれな生活小物素敵なリメイク雑貨

身近な紙でできる―おしゃれな生活小物素敵なリメイク雑貨 (なか見! 検索)

ソースコード

それでは、以下にソースコードを示します。設置の仕方は、他の「右クリックシリーズ」と同じです。

(重要: 2005年11月4日amazon.co.jp の商品個別ページの title 要素の形式が変わったため、本スクリプトもそれに対応するよう改定しました。すでに古い版を持って行かれた方は、新しい版に差し替えてください)

<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
<meta HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<script language="JavaScript" type="text/javascript">
// 右クリックで Amazonアソシエイト (画像付き)
// -- 画像付きでAmazonアソシエイトリンクを生成する MenuExt
// Copyleft 2004, 2005 by H.Tsujimura (tsupo@na.rim.or.jp)
// Ver 1.0  30 May 2004  最初の公開バージョン
// Ver 1.1  22 Jun 2004  改訂版
// Ver 2.0  11 May 2005  新しい形式のリンクに対応
// Ver 2.1  16 Sep 2005 title要素の内容が変更されたのに伴う対応
// Ver 3.0   2 Nov 2005 「なか見! 検索」に対応
// Ver 3.1   4 Sep 2005 title要素の内容がまたまた変更されたのに伴う対応
// Ver 3.1a 23 Jan 2006  サーバ側に JavaScript を設置しなくても、とりあえずは機能するようにした

// なお、本スクリプトが生成するアマゾンアソシエイトの html ソースを利用するには、
//    (a) あらかじめ、サーバ側に以下の内容の JavaSctipt ファイルが設置済みであり、
//    (b) 本スクリプトの生成した html ソースの貼り付け先の Web ページ(ブログも含む)で、当該 JavaScript を
//        インクルードする
// ことで、当該商品の画像が用意されていない場合は、「No Image」画像が代わりに表示されるようになります。
/* 以下、サーバ側に設置する JavaScript のソース
↓↓ ここから ↓↓
function replaceImageForAmazon(img,rep_img) {
   if (img.width == '1' && img.src.match(/\.01\./)) {
       img.src = rep_img; // 『「画像がありません」画像』を代替画像とする
   }
   else if (img.width == '1') {
       img.src = img.src.replace('.09.','.01.');
                         // *.09.* 画像の代用として *.01.* を採用する
       if (img.width == '1')
           img.src = rep_img;
   }
}

window.onload = function(){
    oElements = document.getElementsByTagName("img");
    for (i = 0; i < oElements.length; i++) {
        if ( oElements[i].src.match("http://images-jp.amazon.com/images/") )
            replaceImageForAmazon(oElements[i],"http://images-jp.amazon.com/images/G/09/icons/no-img-sm.gif");
    }
}
↑↑ ここまで ↑↑
*/

function translateString(str) {
    var result = "";
    var len    = str.length;
    var rep    = 0;
    var i;

    for ( i = 0; i < len; i++ ) {
        if ( str.charAt(i) == '\n' ) {
            if ( rep == 0 )
                result += '<br />';
            rep++;
            continue;
        }
        else if ( str.charAt(i) == '\r' )
            continue;
        rep = 0;

        if ( str.charAt(i) == '>' )
	    result += "&gt;";
        else if ( str.charAt(i) == '<' )
	    result += "&lt;";
        else if ( str.charAt(i) == '&' )
	    result += "&amp;";
     // else if ( str.charAt(i) == ' ' )
     //     result += "&nbsp;";
        else if ( str.charAt(i) == '"' )  // "
	    result += "&quot;";
        else
	    result += str.charAt(i);
    }

    return ( result );
}

obj = external.menuArguments;   // 右クリック時の引数オブジェクト
page_url  = obj.document.URL;   // いま見ているサイト(ページ)のURL
title_txt = obj.document.title; // いま見ているサイト(ページ)のタイトル
str = obj.document.selection.createRange().text;  // 選択されている文字列

// ↓↓ 自分のアソシエイトIDに書き換えてください
var assoc     = "tsuporoswebpa-22";
// ↑↑ 自分のアソシエイトIDに書き換えてください

var ai        = page_url.indexOf('ASIN');
var asin      = page_url.substring(ai+5,ai+15);

if ( ai == -1 ) {
    ai   = page_url.indexOf('books');
    asin = page_url.substring(ai+6,ai+16);
}

// nodeS = title_txt.indexOf(' ') + 1;  // 2005年10月以前
// nodeE = title_txt.indexOf(':');      // 2005年10月以前
nodeS = title_txt.indexOf(':') + 1;    // 2005年10月以降
nodeE = title_txt.indexOf(': ');       // 2005年10月以降
if ( nodeE == -1 ) {
    // 2005年11月4日から
    nodeE = title_txt.indexOf(': ');
    nodeStr = title_txt.substring(nodeE+2,title_txt.length);
}
else {
    // 2005年11月3日まで
    nodeStr = title_txt.substring(nodeS,nodeE);
}

rep_img = "icons/books/comingsoon_books.gif";
if ( title_txt.match("アダルト") )
   rep_img = "icons/dvd/adult-cover-image-thumb.gif";
else if ( nodeStr == "洋書" )
   rep_img = "icons/english-books/comingsoon_fbooks.gif";
else if ( nodeStr == "エレクトロニクス" )
    rep_img = "icons/electronics/no-image-ce.gif";
else if ( nodeStr.match("ホーム") )
    rep_img = "hardlines/kitchen-icon/placeholder-icon.gif";
else if ( nodeStr == "音楽" )
    rep_img = "icons/music/comingsoon_music.gif";
else if ( nodeStr == "DVD" )
    rep_img = "icons/dvd/comingsoon_dvd.gif";
else if ( nodeStr == "ビデオ" )
    rep_img = "icons/video/comingsoon_video.gif";
else if ( nodeStr == "ソフトウェア" )
    rep_img = "icons/software/comingsoon_software.gif";
else if ( nodeStr == "ゲーム" )
    rep_img = "icons/videogames/comingsoon_games.gif";
else if ( nodeStr.match("おもちゃ") )
    rep_img = "icons/no-img-sm.gif";

// 従来          <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4091370799/tsuporoswebpa-22">ないしょのつぼみ 1 (1)</a>
// 2005年4月以降 <a href="http://www.amazon.co.jp/exec/obidos/redirect?path=ASIN/4091370799&link_code=as2&camp=247&tag=tsuporoswebpa-22&creative=1211">ないしょのつぼみ 1 (1)</a><img src="http://www.assoc-amazon.jp/e/ir?t=tsuporoswebpa-22&l=as2&o=9&a=4091370799" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

// amazonUrl  = 'http://www.amazon.co.jp/exec/obidos/ASIN/'+asin+'/'+assoc;
amazonUrl  = 'http://www.amazon.co.jp/exec/obidos/redirect?path=ASIN/'+asin+'&amp;link_code=as2&amp;camp=247&amp;tag='+assoc+'&amp;creative=1211';
/* 2005年11月3日まで
loc = title_txt.indexOf(':');
if ( loc >= 0 )
    linkString = title_txt.substring(loc+2,title_txt.length);
else {
    loc = title_txt.indexOf(':');
    if ( loc >= 0 ) {
        linkString = title_txt.substring(loc+1,title_txt.length);
        loc = linkString.indexOf(':');
        if ( loc >= 0 )
            linkString = linkString.substring(loc+2,linkString.length);
    }
    else
        linkString = title_txt;
}
*/
linkString = title_txt.substring(nodeS,nodeE); /* 2005年11月4日から */
linkString = translateString(linkString);

// aff_url = amazonUrl + "/ref=nosim/"; // 商品ページへのリンク
aff_url = amazonUrl;                    // 商品ページへのリンク
aff_string = '<a href="' + aff_url + '" target="_blank">' + linkString + '</a>';
rep_img = "http://images-jp.amazon.com/images/G/09/" + rep_img;
link = '<a href="'+amazonUrl+'"><img src="http://images-jp.amazon.com/images/P/'+asin+'.09.MZZZZZZZ.jpg" border="0" alt="' + linkString + '" /></a>';

track_url = 'http://www.assoc-amazon.jp/e/ir?t='+assoc+'&amp;l=as2&amp;o=9&amp;a='+asin;
track_string = '<img src="' + track_url + '" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />';

if ( (nodeStr == "本") || (nodeStr == "洋書") ) {
    // 「なか見! 検索」は本(和書[雑誌を含む])と洋書のみ
    searchLink = 'http://www.amazon.co.jp/gp/reader/' + asin + '/ref=' + assoc;
    if ( str == "" )
        prompt('', aff_string + track_string + "<br />" + link + '<br />(<a href="'+ searchLink + '" title="注意: 当該書籍・商品が「なか見! 検索」に対応しているとは限りません">なか見! 検索</a>)');
    else {
        qTag = '<blockquote cite="' + page_url + '" style="width: 88%; padding: 3px;"><div style="float: left; width: 65%;"><p>' + translateString(str) + '</p></div><div style="float: right; width: 34%;"><p style="background-color: #FFF;">' + link + '</p></div><p style="clear: both; background-color: #FFF;"><cite>' + aff_string + track_string + '</cite> (<a href="'+ searchLink + '" title="注意: 当該書籍・商品が「なか見! 検索」に対応しているとは限りません">なか見! 検索</a>)</p></blockquote>';
        prompt('', qTag);
    }
}
else {
    if ( str == "" )
        prompt('', aff_string + track_string + "<br />" + link);
    else {
        qTag = '<blockquote cite="' + page_url + '" style="width: 88%; padding: 3px;"><div style="float: left; width: 65%;"><p>' + translateString(str) + '</p></div><div style="float: right; width: 34%;"><p style="background-color: #FFF;">' + link + '</p></div><p style="clear: both; background-color: #FFF;"><cite>' + aff_string + track_string + '</cite></p></blockquote>';
        prompt('', qTag);
    }
}
</script>

ついでに、といってはなんですが、「右クリックで BlogPeople に登録」も改訂版を用意しました。「何を今さら」という感じが強いですが、いまでも昔のスクリプトを使っている人がいましたら、差し替えておいてください。お待たせしすぎてしまって、申し訳ないです。

投稿者: tsupo 2005.11.02 午後 07:34 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


プログラミング」カテゴリ内の最近の記事

右クリック(MenuExt)」カテゴリ内の最近の記事

書籍・雑誌」カテゴリ内の最近の記事

品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/6737/6859427

この記事へのトラックバック一覧です: 右クリックで Amazon アソシエイト 「なか見! 検索」対応版:

» 右クリックで Amazon アソシエイト スポーツストア対応版 from 観測気球
遅くなってしまいましたが、アマゾンのスポーツストアに対応するよう書き直しました。どうぞご利用ください。 続きを読む

受信: 2005.11.28 午後 02:00

コメント

コメントを書く




※イタズラ防止のため、メールアドレスを入力しないと投稿できません。

次からのコメント入力の手間を省くために、名前やメールアドレスをcookieに記憶しますか?


URL を入力すると、その URL にリンクがはられます。
なお、メールアドレスは公開されません。ご安心ください。


ワード

ニッセン

fujisan.co.jp

楽天市場