« 右クリックで「A8.NET経由楽天市場・画像付き」 | トップページ | 右クリックで「A8.NET経由楽天市場・画像付き」楽天トラベル対応版 »
2004.09.20
右クリックで「A8.NET経由楽天市場・画像付き」改定版
注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイトID(a8mat番号)に書き換えてから使ってください。そのまま使うのはやめてください。よろしくお願いします。 (2008年4月28日追記)
ROCAさんのコメントをヒントに改定版を作ってみました。
ただし、楽天の場合、画像と引用したいテキストを同時にマウスで選択すると、目的の画像以外に、アクセス解析用の1px×1pxの画像や表示位置調整用の透明なgif画像など、目的の画像以外の(目には見えない)画像も含まれてしまう可能性があるため、どれが本当に必要な画像なのか、見極める手段が必要になります。
いろいろ悩んだ挙句、結局、アドホックな方法で対応してしまいました。ってことで、楽天以外には使えない、汎用性に乏しい物になってしまいました。
汎用的なのを作るのは、難しいですね。Amazon Web Services のような仕組みを、他のアフィリエイトでも用意して欲しいです。
この改訂版を使っても、期待している画像とは違う画像を拾ってしまう可能性があります。万一、期待していない画像を拾ってしまった場合は、生成された html ソースを手で修正してください。また、余分な <br /> は、適宜削除してください。
それでは、ソース、行きます。
注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイトID(a8mat番号)に書き換えてから使ってください。そのまま使うのはやめてください。よろしくお願いします。 (2008年4月28日追記)
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC_JP">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<SCRIPT language="JavaScript" type="text/javascript">
// 右クリックで「A8.NET経由で楽天のアフィリエイトのリンク」を作成する
// Copyleft 2004 by H.Tsujimura (tsupo@na.rim.or.jp)
// Ver 1.0 19 Sep 2004 最初の公開バージョン
// Ver 1.1 20 Sep 2004 改訂版
// 注意: A8.NET経由の場合、楽天本体、楽天ブックス、楽天トラベル(旅の窓口)はそれぞれ別途、契約をする必要があります。
// このスクリプトがサポートするのは、楽天本体(楽天市場)のアフィリエイトリンクに限ります。
// A8.NET経由で楽天ブックスにアフィリエイトリンクを貼りたい場合は、
// “右クリックで「A8.NET経由で楽天ブックスのアフィリエイトのリンク」を作成する”
// (http://watcher.moe-nifty.com/memo/2004/09/a8net.html)
// スクリプトを使ってください。楽天トラベル用のスクリプトは、まだ作成していません。
function translateString(str) {
result = "";
len = str.length;
for ( i = 0; i < len; i++ ) {
if ( str.charAt(i) == '?' )
result += "%3F";
else if ( str.charAt(i) == '>' )
result += "%3E";
else if ( str.charAt(i) == '=' )
result += "%3D";
else if ( str.charAt(i) == '<' )
result += "%3C";
else if ( str.charAt(i) == ':' )
result += "%3A";
else if ( str.charAt(i) == '/' )
result += "%2F";
else if ( str.charAt(i) == '&' )
result += "%26";
else if ( str.charAt(i) == '%' )
result += "%25";
else if ( str.charAt(i) == '#' )
result += "%23";
else if ( str.charAt(i) == ' ' )
result += " ";
else if ( str.charAt(i) == '\n' )
result += '<br />';
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; // 選択されている文字列
str2 = obj.document.body;
inn = str2.innerHTML;
img = obj.document.images;
num = img.length;
// ↓↓ 自分のa8mat番号に書き換えてください
var a8mat = "X6X6A+6S3QSX+5WS+BWXXD";
// ↑↑ 自分のa8mat番号に書き換えてください
/*
* 生成例 (http://www.a8.net/a8v2/rakuten/g-top.jsp を使用)
* <a href="http://px.a8.net/svt/ejp?a8mat=O6H6A+6S3QSY+5WS+BWVTD&a8ejpredirect=http%3A%2F%2Fwww.rakuten.co.jp%2Fedigi%2F802797%2F813693%2F" target="_blank">
* <img border="0" alt="Click Here!" src="http://image.www.rakuten.co.jp/edigi/img10011630153.jpeg"></a>
* <img border="0" width="1" height="1" src="http://ad.a8.net/0.gif?a8mat=O6H6A+6S3QSY+5WS+BWVTD" alt="">
*
* つまり、以下のような html ソースを生成すれば OK
* <a href="http://px.a8.net/svt/ejp?a8mat=A8mat番号&a8ejpredirect=商品ページのURL" target="_blank">
* <img border="0" alt="Click Here!" src="表示させたい画像のURL"></a>
* <img border="0" width="1" height="1" src="http://ad.a8.net/0.gif?a8mat=A8mat番号" alt="">
*
* 問題は、どうやって画像のURLを取得するか?
* →
* 同一ページで扱っている商品が1つだけの場合は、いちばん最後の jpeg ファイルが目的の画像である場合が多い
* という経験則に基づき、いちばん最後の jpeg ファイルをとりあえず採用。駄目だったら、生成したhtmlソース
* を手で書き換えてね、って方法を採用します (^^;
* 同一ページで複数商品を扱ってる場合は、ほとんど手書きでの修正が必要になってしまいますが、ごめんなさい。
*
* ほとんどの楽天ショップでは、ナビゲーション用に gif 画像、商品は jpeg 画像を使っているので、上記でいう
* 経験則が適用できることが多い。ただし、一部の楽天ショップはナビゲーション用に jpeg 画像、商品に gif 画
* 像を使っていることがあり、その場合は、ナビゲーション用の画像を拾ってしまうことになる。
*/
img_url = "";
if ( str != "" ) {
/* 大抵の場合は以下の処理で選択中の画像のURLが取れると思われる(gif画像の場合も含む) */
srcEvent = obj.event;
eventElement = obj.document.elementFromPoint( srcEvent.x, srcEvent.y );
eObj = eventElement;
str3 = inn.substring(0,inn.lastIndexOf(eObj.innerHTML));
if ( str3 == "" )
str3 = inn.substring(0,inn.lastIndexOf(str));
str4 = str3.substring(0,str3.lastIndexOf("<IMG") - 4); // アクセス解析用のダミー
str5 = str4.substring(str4.lastIndexOf("<IMG")); // 画像を読み飛ばす
str6 = str5.substring(str5.indexOf("src=")+5);
img_url = str6.substring(0,str6.indexOf('"')); // 選択されている画像の URL
if ( img_url.indexOf("http:") < 0 )
img_url = "";
}
cnt = 0;
w = 0;
h = 0;
if ( (img != "") && (num > 0) ) {
if ( img_url == "" ) {
/* 経験則に基づく画像URL取得処理 (商品にgif画像を使っているショップの場合、うまくいかない) */
for ( i = 0; i < num; i++ ) {
if ( img[i].src.lastIndexOf('.jpeg') > 0 )
cnt = i;
}
w = img[cnt].width;
h = img[cnt].height;
img_url = img[cnt].src;
}
else {
img = new Image;
img.src = img_url;
w = img.width;
h = img.height;
}
window.open(img_url, 'Image',
'scrollbars=no,width=' + (w+20) + ',height=' + (h+20) + ',left=100,top=100,status=yes,resizable=yes');
// ↑ ・ここで表示された画像が期待している画像と違う場合は、生成された html を手書きで修正してください (_o_)
// ・画像は期待しているものだが画像のサイズがおかしい(小さい)場合は、もう一度本スクリプトを実行し直すと、
// 正しいサイズになります。
}
linkString = title_txt.substring(title_txt.indexOf(':')+1,title_txt.length);
target_url = 'http://px.a8.net/svt/ejp?a8mat=' + a8mat + '&a8ejpredirect=' + translateString( page_url );
link = '<a href="' + target_url + '" target="_blank">' + linkString + '</a>';
img_str = "";
if ( img_url != "" ) {
if ( (w > 0) && (h > 0) )
img_str = '<img border="0" alt="' + linkString + '" src="' + img_url + '" width="' + w + '" height="' + h + '" />';
else
img_str = '<img border="0" alt="' + linkString + '" src="' + img_url + '" />';
img_str = '<a href="' + target_url + '" target="_blank">' + img_str + '</a>';
}
acc_str = '<img border="0" width="1" height="1" src="http://ad.a8.net/0.gif?a8mat=' + a8mat + '" alt="" />';
if ( str == "" ) {
if ( img_url == "" )
prompt('', link + acc_str);
else
prompt('', link + '<br />' + img_str + acc_str);
}
else {
gTag = "";
str = translateString( str );
if ( img_url == "" )
qTag = '<blockquote cite="' + page_url + '"><p>' + str + '</p><cite>' + link + acc_str + '</cite></blockquote>';
else
qTag = '<blockquote cite="' + page_url + '" style="width: 88%; padding: 3px;"><p style="float: left; width: 65%;">' + str + '</p><p style="float: right; width: 34%; background-color: #FFF;">' + img_str + '</p><p style="float: left; width: 75%; background-color: #FFF;"><cite>' + link + acc_str + '</cite></p></blockquote>';
prompt('',qTag);
}
</SCRIPT>
使用例 その1
Vネックポロ
ペットパラダイス
Vネックポロ(グリーン)【SS】
商品番号 332-22572
価格 2,000円 (税込) 送料別
使用例 その2
サッカー日本代表チームモデルドッグTシャツ。
背番号12はサポーターを意味します。
わんこもオーナーも一緒に日本代表チームを応援しよう!
価格 7,900円 (税込8,295円) 送料別
SOLD OUT
上記の使用例は余分な <br /> を取り除いていませんし、画像の表示位置の調整も行なっていません。本スクリプトが生成した html ソースをそのまま張りつけてみました。
注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイトID(a8mat番号)に書き換えてから使ってください。そのまま使うのはやめてください。よろしくお願いします。 (2008年4月28日追記)
投稿者: tsupo 2004.09.20 午前 11:53
| 固定リンク
|
|
| ![]()
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: 右クリックで「A8.NET経由楽天市場・画像付き」改定版:
» ヤミと帽子と本の旅人 - リリスのヴィネット・フィギュア from 観測気球
A8ワッペンを試しに使ってみました。確かに今までよりは楽になりますね。 続きを読む

![サッカー日本代表チームモデルレインコート[Sサイズ]](http://image.www.rakuten.co.jp/inunoseikatsu/img10491258960.gif)



