ヨメレバ代替AmazonAPIを使わない商品リンク自動生成シリーズのBOOK版「あまよめ」を作ってみた

はじめての自作にチャレンジしたカエレバ代替AmazonAPIを使わない自動生成商品リンクサービス「あまりん」を作成しましたが、本には対応していませんでした。
まだいろいろと不具合がありますが、なんとか使えるレベルになってきました。

本専用の商品リンク自動生成

はじめての自作サービス「あまりん」のBOOK版です。ヨメレバ風と思ってください。

事の経緯は、「あまりん」を作り始めた記事に書いた通り。

AmazonAPIを使おうとしても、実績がないと使えないということで、ならばAmazonAPIを使わずに自動生成できないかと思って作り始めました。

Amazonの本は、他の商品の数字と英字の組み合わせコードと違って、独自の10桁の数字のみで作られたコードになっています。
URLやhtmlのコードも違っていて、「あまりん」では取得できないものが多かったので、本専用ということで作りました。

使い方は、前回の「あまりんVer.2.0」の記事に書いたものと同じです。

あまよめ

ブックマークレット用のjavascriptと本体のPHPです。
本専用ですが、Kindleには対応していません。

ブックマークレット

javascript:(function(){var img=window.getSelection().toString();var link;$link=img.replace(/<a href="(.+)" target.*/,'$1');var nakami;$nakami=img.replace(/.*ASIN=([0-9A-Z]+)\&Format=.*/,'$1');var isbn;$isbn=document.getElementsByClassName(/.*ISBN\s([0-9]+)\).*/,'$1');var taito;$taito=prompt('Title',document.title.replace(/(.+)(:|\s\|)\s(.*)\s\|(.*)\s\|\s(通販|Kindleストア) \| Amazon/,'$1'));var mkinfo = document.getElementById('bylineInfo');var maker;$maker=prompt('Product',document.title.replace(/(.+)(:|\s\|)\s(.*)\s\|(.*)\s\|\s(通販|Kindleストア) \| Amazon/,'$3'));var kw;$kw=prompt('Keywords',document.getElementsByName('keywords').item(0).content);window.open('https://weblog10.com/amayome.php?link='+encodeURIComponent($link)+'&asin='+$nakami+'&isbn='+$isbn+'&title='+$taito+'&maker='+$maker+'&kw='+$kw)})();
Javascript内のURLを、ご自身がPHPファイルを設置したURLへ書き換えて使用してください。
このまま使用すると、私のアフィリエイトIDでリンクが生成されます。

あまよめ(amayome.php)

サーバに置くPHPです。

<?php
// WordPress用の関数をここでも使いたいから読み込む
require_once( dirname( __FILE__ ) . '/wp-load.php' );
$image_url = $_GET["img"];
$page_url = rawurldecode($_GET["link"]);
$getasin = $_GET["asin"];
$getisbn = $_GET["isbn"];
$gettitle = $_GET["title"];
$getmaker = $_GET["maker"];
$getkw = $_GET["kw"];

//ISBN10をJAN(ISBN13)へ変換して変数へ格納する関数を定義
function calcisbn13($data){
  //配列へ入れる
  $isbn_array = str_split($data);
  //チェックデジット計算
  $cd_13 = (9*1+7*3+8*1+$isbn_array[0]*3+$isbn_array[1]*1+$isbn_array[2]*3+$isbn_array[3]*1+$isbn_array[4]*3+$isbn_array[5]*1+$isbn_array[6]*3+$isbn_array[7]*1+$isbn_array[8]*3) % 10;
  $cd_13 = 10-$cd_13;

  if($cd_13==10){
    $cd_13 = 0;
  }

  $isbn13 = '978'.$isbn_array[0].$isbn_array[1].$isbn_array[2].$isbn_array[3].$isbn_array[4].$isbn_array[5].$isbn_array[6].$isbn_array[7].$isbn_array[8].$cd_13;

  return $isbn13;
}


//ISBN13を取得
if (preg_match('/^[0-9]{10}$/', $getasin)) {
  $isbn13 = calcisbn13($getasin);
}elseif (preg_match('/^[0-9]{10}$/', $getisbn)) {
  $isbn13 = calcisbn13($getisbn);
}

// XXXXXXXXの箇所にアソシエイトタグを指定
  //AmazonアソシエイトID
  $Amazon_associate_tag = 'XXXXXXXX';

  //Yahoo!バリューコマースSID
  $sid = 'XXXXXXXX';
  //Yahoo!バリューコマースPID
  $pid = 'XXXXXXXX';

//楽天APIリクエストURLのパラメータを配列で指定
$params = array(
  //取得フォーマットを指定
  'format' => 'xml',
  //商品ID(ISBN)を指定
  'isbnjan' => $isbn13,
  //XXXXXXXXの箇所に楽天アフィリエイトIDを指定
  'affiliateId' => 'XXXXXXXX',
  //XXXXXXXXの箇所に楽天アプリIDを指定
  'applicationId' => 'XXXXXXXX'
);

// パラメータの配列を結合
$parameter = '';
foreach ($params as $key => $value) {
    $parameter .= $key . '=' . rawurlencode($value) . '&';
}
// パラメータに不要な最後の文字列&amp;を削除
$parameter = rtrim($parameter, '&');

// エンドポイントのホスト、パスをそれぞれ変数に格納
$host_path = 'app.rakuten.co.jp/services/api/BooksTotal/Search/20170404';

// リクエストURLを作成
$request_url = 'https://' . $host_path . '?' . $parameter;

$result = file_get_contents($request_url,false,stream_context_create());


// XML形式の商品データをオブジェクトに変換
$xml = simplexml_load_string($result);

// 使用する商品データを取得して変数に格納
$rakuten_url = $xml->Items->Item->affiliateUrl;

// 使用する商品データを取得して変数に格納
$ad_url = 'https://ir-jp.amazon-adsystem.com/e/ir?t='.$Amazon_associate_tag.'&language=ja_JP&l=li2&o=9&a='.$getasin;
$image_url = '//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN='.$getasin.'&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag='.$Amazon_associate_tag.'&language=ja_JP';


// 各種アフィリエイトのキーワード検索用URLをそれぞれの変数に入れる
$amazon_url = 'https://www.amazon.co.jp/exec/obidos/ASIN/'.$getasin.'/'.$Amazon_associate_tag;
$yahoo_url = 'https://ck.jp.ap.valuecommerce.com/servlet/referral?sid='.$sid.'&amp;pid='.$pid.'&amp;vc_url=http%3A%2F%2Fsearch.shopping.yahoo.co.jp%2Fsearch%3Fp%3D'.$getkw;
?>
<html>
<head>
    <title>あまよめ</title>
</head>
<body>
  <h1>あまよめ</h1>
WEBLOGでカエレバと同じようにリンクを作るためだけに作ったページ
<h2>使い方</h2>
まずは、このブックマークレットをブラウザに保存する。<br>
<!-- これがブックマークレットの本体。URL部分はphpファイルを置いたパスに変更する必要がある。 -->
<a href="javascript%3A%28+function%28%29%7B+var+img%3Dwindow.getSelection%28%29.toString%28%29%3B+var+link%3B+%24link%3Dimg.replace%28%2F%3Ca+href%3D%22%28.%2B%29%22+target.%2A%2F%2C%27%241%27%29%3B+var+nakami%3B+%24nakami%3Dlocation.pathname.replace%28%2F.%2A%5C%2F%28ASIN%7Cdp%7Cproduct%7Caw%5C%2Fd%29%5C%2F%28%5B0-9A-Z%5D%2B%29%5C%2F.%2A%2F%2C%27%242%27%29%3B+var+taito%3B+%24taito%3Dprompt%28%27Title%27%2Cdocument.title.replace%28%2F%5EAmazon.%2A%5Cs%28%3A%7C%5C%7C%29%5Cs%28.%2B%29%28%3A%7C%5Cs%5C%7C%29%5Cs.%2A%24%2F%2C%27%242%27%29%29%3B+var+mkinfo+%3D+document.getElementById%28%27bylineInfo%27%29%3B+var+maker%3B+%24maker%3Dprompt%28%27Product%27%2Cmkinfo.textContent%29%3B+var+kw%3B+%24kw%3Dprompt%28%27Keywords%27%2Cdocument.getElementsByName%28%27keywords%27%29.item%280%29.content%29%3B+window.open%28%27https%3A%2F%2Fweblog10.com%2Famalin.php%3Flink%3D%27%2BencodeURIComponent%28%24link%29%2B%27%26asin%3D%27%2B%24nakami%2B%27%26title%3D%27%2B%24taito%2B%27%26maker%3D%27%2B%24maker%2B%27%26kw%3D%27%2B%24kw%29+%7D+%29%28%29%3B">あまりんブックマークレット</a><br>
<a href="javascript%3A%28function%28%29%7Bvar+img%3Dwindow.getSelection%28%29.toString%28%29%3Bvar+link%3B%24link%3Dimg.replace%28%2F%3Ca+href%3D%22%28.%2B%29%22+target.%2A%2F%2C%27%241%27%29%3Bvar+nakami%3B%24nakami%3Dimg.replace%28%2F.%2AASIN%3D%28%5B0-9A-Z%5D%2B%29%5C%26Format%3D.%2A%2F%2C%27%241%27%29%3Bvar+isbn%3B%24isbn%3Ddocument.getElementsByClassName%28%2F.%2AISBN%5Cs%28%5B0-9%5D%2B%29%5C%29.%2A%2F%2C%27%241%27%29%3Bvar+isbn13%3B%24isbn13%3Ddocument.getElementsByTagName%28%2F.%2AISBN-13%3A%3Cb%3E978-%28%5B0-9%5D%2B%29%3C%5C%2F.%2A%2F%2C%27%241%27%29%3Bvar+taito%3B%24taito%3Dprompt%28%27Title%27%2Cdocument.title.replace%28%2F%28.%2B%29%28%3A%7C%5Cs%5C%7C%29%5Cs%28.%2A%29%5Cs%5C%7C%28.%2A%29%5Cs%5C%7C%5Cs%28%E9%80%9A%E8%B2%A9%7CKindle%E3%82%B9%E3%83%88%E3%82%A2%29+%5C%7C+Amazon%2F%2C%27%241%27%29%29%3Bvar+mkinfo+%3D+document.getElementById%28%27bylineInfo%27%29%3Bvar+maker%3B%24maker%3Dprompt%28%27Product%27%2Cdocument.title.replace%28%2F%28.%2B%29%28%3A%7C%5Cs%5C%7C%29%5Cs%28.%2A%29%5Cs%5C%7C%28.%2A%29%5Cs%5C%7C%5Cs%28%E9%80%9A%E8%B2%A9%7CKindle%E3%82%B9%E3%83%88%E3%82%A2%29+%5C%7C+Amazon%2F%2C%27%243%27%29%29%3Bvar+kw%3B%24kw%3Dprompt%28%27Keywords%27%2Cdocument.getElementsByName%28%27keywords%27%29.item%280%29.content%29%3Bwindow.open%28%27https%3A%2F%2Fweblog10.com%2Famayome.php%3Flink%3D%27%2BencodeURIComponent%28%24link%29%2B%27%26asin%3D%27%2B%24nakami%2B%27%26isbn%3D%27%2B%24isbn%2B%27%26isbn13%3D%27%2B%24isbn13%2B%27%26title%3D%27%2B%24taito%2B%27%26maker%3D%27%2B%24maker%2B%27%26kw%3D%27%2B%24kw%29%7D%29%28%29%3B">あまよめブックマークレット</a><br>
あとは、Amazonの商品ページで、楽天とYahoo!の検索キーワードにするワードを選択した状態でブックマークレットを実行する。<br>

<div class="cstmreba">
<div class="kaerebalink-box">
<div class="kaerebalink-image"><a href="<?php echo esc_url($page_url); ?>" target="_blank" ><img border="0" src="<?php echo esc_url($image_url); ?>" /></a><img src="<?php echo esc_url($ad_url); ?>" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></div>
<div class="kaerebalink-info">
<div class="kaerebalink-name"><a href="<?php echo esc_url($page_url); ?>" target="_blank" ><?php echo esc_html($gettitle); ?></a></p>
<div class="kaerebalink-powered-date">posted with <a href="https://weblog10.com/amalin.php" rel="nofollow" target="_blank">あまよめ</a></div>
</div>
<div class="kaerebalink-detail"><?php echo esc_html($getmaker); ?></div>
<div class="kaerebalink-link1">
<div class="shoplinkamazon"><a href="<?php echo esc_html($amazon_url); ?>" target="_blank" >Amazon</a></div>
<div class="shoplinkrakuten"><a href="<?php echo esc_html($rakuten_url); ?>" target="_blank" >楽天ブックス</a></div>
<div class="shoplinkyahoo"><a href="<?php echo esc_html($yahoo_url); ?>" target="_blank">Yahooショッピング</a></div>
</div>
</div>
<div class="booklink-footer"></div>
</div>
</div>
<textarea onclick="this.select()">
<div class="cstmreba">
<div class="kaerebalink-box">
<div class="kaerebalink-image"><a href="<?php echo esc_url($page_url); ?>" target="_blank" ><img src="<?php echo esc_url($image_url); ?>" style="border: none;" /></a><img src="<?php echo esc_url($ad_url); ?>" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></div>
<div class="kaerebalink-info">
<div class="kaerebalink-name"><a href="<?php echo esc_url($page_url); ?>" target="_blank" ><?php echo esc_html($gettitle); ?></a></p>
<div class="kaerebalink-powered-date">posted with <a href="https://weblog10.com/amalin.php" rel="nofollow" target="_blank">あまよめ</a></div>
</div>
<div class="kaerebalink-detail"><?php echo esc_html($getmaker); ?></div>
<div class="kaerebalink-link1">
<div class="shoplinkamazon"><a href="<?php echo esc_html($amazon_url); ?>" target="_blank" >Amazon</a></div>
<div class="shoplinkrakuten"><a href="<?php echo esc_html($rakuten_url); ?>" target="_blank" >楽天ブックス</a></div>
<div class="shoplinkyahoo"><a href="<?php echo esc_html($yahoo_url); ?>" target="_blank">Yahooショッピング</a></div>
</div>
</div>
<div class="booklink-footer"></div>
</div>
</div></textarea>
</body>
</html>

「XXXXXXXX」の4箇所を、それぞれのアソシエイトタグに書き換えて使ってください。
ブックマークレットのコードは、設置URLをご自分のPHPファイルを置いたURLへ変更してください。

まとめ

コード書いてる方からみると、あまりにも拙いと思います。いろいろツッコミどころ満載だと思うので、是非コメントからでもツッコんでください。勉強させていただきます。

今回は楽天ブックスの検索ボタン用のリンクで、楽天APIを使ってみました。正直とても大変でした。
取得方法から出力まで逐一調べまくって、なんとか動くようになりました。

コードを書く時間って、大半は調べ物の時間ですね。

スポンサーリンク







シェアする

フォローする