右クリックで「A8.NET経由楽天市場・画像付き」楽天トラベル対応版

観測気球

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

[要旨] 楽天トラベル(旅の窓口)にも対応してみました。
[キーワード] リンク自動生成,アフィリエイト

« 右クリックで「A8.NET経由楽天市場・画像付き」改定版 | トップページ | 足りない本棚 »

2004.09.21

右クリックで「A8.NET経由楽天市場・画像付き」楽天トラベル対応版

注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイトID(a8mat番号)に書き換えてから使ってください。そのまま使うのはやめてください。よろしくお願いします。 (2008年4月28日追記)

右クリックで「A8.NET経由楽天市場・画像付き」改定版 をさらにいじって、楽天トラベル(旅の窓口)にも対応してみました。ただ、楽天トラベルの場合は、画像ファイルは http://www.mytrip.net/ 以外のサイトから引っ張ってきているものもあり、そういう画像はアフィリエイトで使っていいのかどうかはっきりしないので、今回は http://www.mytrip.net/ に画像があることがはっきりしているホテルの場合だけ、画像を持ってくるようにしました。

それでは、ソース、行きます。

注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイト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  改訂版
// Ver 1.2  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;
    rep    = 0;

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

        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 += "&nbsp;";
        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+6S3XXY+5WS+BWXXD"; // 楽天市場の商品リンク用 a8mat 番号
var a8mat2 = "OX15X+D1X12X+9PG+BWXXT"; // 楽天トラベル(旅の窓口)の商品リンク用 a8mat 番号
// ↑↑ 自分のa8mat番号に書き換えてください

rakuten = page_url.match( "http://www.rakuten.co.jp/" );
mytrip  = page_url.match( "http://www.mytrip.net/" );
acc_str = "";

if ( rakuten != null ) {
    // 楽天市場の場合
    /*
     * 生成例 (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 = "";
    w   = 0;
    h   = 0;

    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;
    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 + '&amp;a8ejpredirect=' + translateString( page_url );
    link       = '<a href="' + target_url + '" target="_blank">' + linkString + '</a>';
    acc_str    = '<img border="0" width="1" height="1" src="http://ad.a8.net/0.gif?a8mat=' + a8mat + '" alt="" />';
}
else if ( mytrip != null ) {
    // 楽天トラベル(旅の窓口)の場合
    /*
     * ホテルなら、例えば
     *   http://www.mytrip.net/HOTEL/15836/15836.html
     *     → 画像ファイルの URL は 
     *          http://www.mytrip.net/share/HOTEL/15836/15836.jpg
     *     → アフィリエイトリンクは
     *          http://px.a8.net/svt/ejp?a8mat=A8MAT番号&amp;a8ejpredirect=
     *             http%3A%2F%2Fweb.mytrip.net%2Fportal%2Fmy%2Faffiliate.a8_top%3Frdurl%3D目的のページのURL
     *             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     *               規約によりリダイレクタを噛ませる必要がある (リダイレクタを省いても目的のページへ飛べるが、
     *               アフィリエイト対象外(報酬加算対象外)として扱われるものと思われる)
     * ホテル以外の場合は、画像は必ずしも http://www.mytrip.net/ 内にある訳ではないため、無闇に画像を取り込ま
     * ない方が無難。本スクリプトでは、ホテルの場合のみ、画像の URL を取得することにする。
     */

    img_url = "";
    w   = 0;
    h   = 0;

    hotel_prefix = "http://www.mytrip.net/HOTEL/";
    if ( page_url.match( hotel_prefix ) ) {
        hotelID = page_url.substring(hotel_prefix.length, page_url.lastIndexOf('.'));
        img_url = 'http://www.mytrip.net/share/HOTEL/' + hotelID + ".jpg";
    }

    linkString = title_txt;
    redirect_url = 'http://web.mytrip.net/portal/my/affiliate.a8_top?rdurl=' + page_url;
    target_url = 'http://px.a8.net/svt/ejp?a8mat=' + a8mat2 + '&amp;a8ejpredirect=' + translateString( redirect_url );
    link = '<a href="' + target_url + '" target="_blank">' + linkString + '</a>';

    if ( img_url != "" ) {
        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');
        // ↑ ・画像は期待しているものだが画像のサイズがおかしい(小さい)場合は、もう一度本スクリプトを実行し直すと、
        //      正しいサイズになります。
    }
}


/* 以下、共通処理 */
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>';
}

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>

あとは、このスクリプトと楽天ブックスのスクリプトを統合すれば、楽天関係は一通り完成ですね。

注意: この記事で紹介しているスクリプトを使用するときは、必ずご自分のアフィリエイトID(a8mat番号)に書き換えてから使ってください。そのまま使うのはやめてください。よろしくお願いします。 (2008年4月28日追記)

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

楽天市場


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


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: 右クリックで「A8.NET経由楽天市場・画像付き」楽天トラベル対応版:

» アフィリエイト自動リンクメーカー from 観測気球
これでアフィリエイトな記事がが作成しやすくなる!! 続きを読む

受信: 2004.12.03 午前 10:20

コメント

ワード

ニッセン

fujisan.co.jp

楽天市場