サイトアイコン alm-ore

Amazon.co.jp への個別商品リンク

Amazon.co.jp の商品へのリンクを生成するスクリプトを作ってみました

当方,Amazonアソシエイト・プログラムに参加し,当blog内においても Amazon の各種商品にリンクを張っている.
当blogからリンクをたどって Amazon に行くと「どのページから訪問したか」という情報が取得され,訪問者が商品の購入を行うと,当方にいくばくかのキャッシュバックが行われる.
(別に,お金儲けが目的ではないのですが,なんか面白そうなのでやってるだけです.ちなみに,1月以来,alm-ore 経由で注文された方は1人もいらっしゃらないので,当方のお小遣いは増えておりません)

さて,そんなわけで,日々リンクを作っているわけですが,この作業がめんどくさい.
なぜなら,リンクのURLの中に「どのページから訪問したか」という情報を埋め込む必要があるため,基本的にAmazonの用意したインターフェイスでURLを生成しなければならないからです.
ちなみに,まっとうにやろうとしたら,毎回以下のような作業を行う必要があります.

  1. アソシエイト・プログラムへのログイン(IDとパスワードの入力)
  2. リンク作成ページへ移動(そこへたどり着くのに,3回もボタンをクリックします)
  3. ISBN もしくは ASIN(商品番号)の入力.特に,ASINはAmazon独自のIDのため,いちいちAmazonの中で商品を検索して調べなければなりません
  4. リンクが生成される
  5. 別のリンクを作る場合は,3. へ戻って,ASINの検索からやり直し

めんどうなんじゃい.
特に,上にも書いたけど,ASINの検索が発狂しそうになる.
例えば,The Beatles の “Please Please Me” と 「指輪物語8 王の帰還」 と 「座頭市 」の3点のリンクを作りたいとします.それぞれのASINを実際に調べてみてください.これだけでかなり面倒.

つーわけで,午前中を使って,この作業を簡単にするスクリプトを作成.
出来上がったのはこちら

【使い方】

  1. Amazon への個別商品リンクへ行く
  2. キーワードにリンクを作りたい商品に関するキーワードを入れる.商品の種類を選ぶ.「探してみよう」を押す
  3. 検索結果の一覧が表示される.そのとき,”商品へのリンク” に表示される<a>タグをそのまま使用すればよし.一緒に,商品の画像イメージへのリンクも生成されます

※ 「商品のリンク」で生成されるURLは,一般向けとするため僕のアソシエイトIDは入っておりません.

たったこれだけだけど,とりあえず便利になったかな.
特に,同じ著者の作品のリンクを一気に作るのはやりやすいはず.

なお,先ほどの3つの例題の答えは,僕のスクリプトを使うと,以下のように求まります.
指輪物語8 王の帰還
The Beatles, Please Please Me
座頭市

作り方は以下を参照.


スクリプトはDocodemo Headlineにあるものを流用しました.
ここのPHPスクリプトをもらってきて,改造しました.
実際に使っているスクリプトは,末尾に乗せておきます.

【設定方法】

  1. Amazon.php(末尾のスクリプト)を適当に保存.「アソシエイトID」と「発行されたトークン」を自分のものに書き換える
  2. nusoap.phpを先ほどのスクリプトと同じディレクトリに置く.
  3. 日本語を通るようにするために nusoap.php に手を入れ,UTF-8 に対応させる(参考).
    • 86 行目あたりの “var $soap_defencoding = ‘UTF-8’;” のコメントをはずし,次行の”var $soap_defencoding = ‘ISO-8859-1’;” をコメント
    • 4390行目付近の “if($this->decode_utf8){$data = utf8_decode($data);}” をコメントアウト

—Amazon.php 2004.03.07—
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<meta http-equiv=”Content-Style-Type” content=”text/css”>
<title>Amazon への個別商品リンク</title>
<style type=”text/css”>
<!–
body,table{
font-size : 13px;
font-family : Verdana;
}
h3{
font-size : 18px;
font-family : Verdana;
}
–>
</style>
</head>

<body>
<h3>Amazon への個別商品リンク</h3>
<hr>
【参考と謝辞】<br>
スクリプトは<a href=”http://works.xrea.jp/”>Docodemo Headline</a>を流用.<br>
日本語が文字化けする件は<a href=”http://sb.xrea.com/showthread.php?threadid=6272″>この記事</a>で解決
<hr>

<?
//by matu 変数の初期化
$keyword = $_GET[‘keyword’];
$keyword = mb_convert_encoding($keyword, “UTF-8”, “auto”);
$page = $_GET[‘page’];
$media = $_GET[‘media’];
?>

<form method=”get” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”>キーワード:<input type=”text” name=”keyword” size=”20″ value=”<? echo $keyword; ?>”> 種類:<select name=”media”>
<option value=”music-jp”>ポピュラー音楽</option>
<option value=”books-jp”>書籍</option>
<option value=”classical-jp”>クラシック音楽</option>
<option value=”dvd-jp”>DVD</option>
<option value=”video-jp”>ビデオ</option>
<option value=”electronics-jp”>家電</option>
<option value=”software-jp”>ソフトウェア</option>
<option value=”videogames-jp”>ゲーム</option>
</select>
<input type=”submit” name=”doit” value=”探してみよう”>
</form>

<?php
echo date(“Y年n月d日 現在 ”, mktime());
echo “<br /><b>検索キーワード</b> “, $keyword;
?>

<?php
// include class
include(“nusoap.php”);

if($keyword)
{
$keyword = htmlspecialchars($keyword);

$soapclient = new soapclient(“http://soap.amazon.com/schemas3/AmazonWebServices.wsdl”, true);

// if no page specified, start with page 1
if (!$_GET[‘page’]) { $page = 1; } else { $page = $_GET[‘page’]; }

$proxy = $soapclient->getProxy();

$params = array(
‘keyword’ => $keyword,
‘page’ => $page,
‘mode’ => $media,
‘tag’ => ‘アソシエイトID’,
‘type’ => ‘lite’,
‘sort’ => ‘reviewrank’,
‘devtag’ => ‘発行されたトークン’,
‘locale’ => ‘jp’
);

$result = $proxy->KeywordSearchRequest($params);

if(!$result[‘faultstring’])
{
$total = $result[‘TotalResults’];
$items = $result[‘Details’];
echo “<br><br>\n”;

foreach ($items as $i)
{
?>

<?
if($media==’books-jp’)
{
$Author = implode(“, “, $i[‘Authors’]);
}
else if($media==’music-jp’)
{
if($i[‘Artists’] != “”){
$Author = implode(“, “, $i[‘Artists’]);
}
}

?>

<table border=”0″ cellpadding=”0″ width=”100%”>
<tbody>
<tr>
<td rowspan=”7″ width=”100″><a href=”<?php echo $i[‘Url’]; ?>”><img border=”0″ src=<?php echo $i[‘ImageUrlSmall’]; ?> alt=”<?php echo $i[‘ProductName’]; ?>”></a></td>
<td><a href=”<?php echo $i[‘Url’]; ?>”><b><?php echo $i[‘ProductName’]; ?></b></a> / <?php echo $Author; ?></td>
</tr>
<tr>
<td>定価 : <?php echo $i[‘ListPrice’]; ?> / アマゾン価格 : <?php echo $i[‘OurPrice’]; ?> / ASIN : <? echo $i[‘Asin’]; ?> </td>
</tr>
<!–
<tr>
<td><b>アソシエイトリンク</b> <a href=”<? echo $i[‘Url’]; ?>”><a href=”<? echo $i[‘Url’]; ?>”><? echo $i[‘ProductName’] ?></a></a></td>
</tr>
–>
<tr>
<td>
<b>商品へのリンク</b> <a href=”http://www.amazon.co.jp/exec/obidos/ASIN/<? echo $i[‘Asin’]; ?>”><a href=”http://www.amazon.co.jp/exec/obidos/ASIN/<? echo $i[‘Asin’]; ?>”><? echo $i[‘ProductName’] ?></a></a>
</td>
</tr>
<tr>
<td><b>small image</b> <a href=”<? echo $i[‘ImageUrlSmall’] ?>”><img src=”<? echo $i[‘ImageUrlSmall’] ?>” /></a></td>
</tr>
<tr>
<td><b>Medium image</b> <a href=”<? echo $i[‘ImageUrlMedium’] ?>”><img src=”<? echo $i[‘ImageUrlMedium’] ?>” /></a></td>
</tr>
<tr>
<td><b>Large image</b> <a href=”<? echo $i[‘ImageUrlLarge’] ?>”><img src=”<? echo $i[‘ImageUrlLarge’] ?>” /></a></td>
</tr>

</tbody>
</table>
<br>

<?
//print_r($i);
?>

<?php
}
}
}
?>

<!– next and prev page links –>
<?php
$pageCount = ceil($total/10);
$keyword = rawurlencode(“$keyword”);
?>

<table border=”0″ cellspacing=”5″ cellpadding=”0″>
<tr>
<td>
<?php
if ($page != 1)
{
?>
<a href=”<?php echo $_SERVER[‘PHP_SELF’]; ?>?page=<?php echo $page-1; ?>&keyword=<?php echo $keyword; ?>&media=<?php echo $media; ?>”>前のページ</a>
<?php
}
?>
 
</td>
<td><b><?php echo $page; ?>ページ目 / <?php echo $pageCount; ?>ページ中</b></td>
<td>
 
<?php
if ($page < $pageCount)
{
?>
<a href=”<?php echo $_SERVER[‘PHP_SELF’]; ?>?page=<?php echo $page+1; ?>&keyword=<?php echo $keyword; ?>&media=<?php echo $media; ?>”>次のページ</a>
<?php
}
?>
</td>
</tr>
</table>
</body></html>

モバイルバージョンを終了