Amazonアソシエイトから全期間の商品注文数をぶっこ抜くPHPコードサンプル

akiyan.comではAmazonの商品紹介部分に「このサイトから -人 が購入しました」といった情報を掲載しています。最近、これを自動化するために作った「注文数ぶっこ抜きスクリプト」を公開します。ちなみに統一性も美しさも拡張性もへったくれもないコードですので、「とりあえず動く」「どうやればダウンロードできるのかのサンプル」としてご利用ください。

使い方

このスクリプトはPEARのHTTP_Clientを使用します。デフォルトではインストールされていないケースがありますので、root権限で「pear install HTTP_Client」を実行するか、パスの通ったディレクトリにライブラリを設置しておいてください。

そしてこのスクリプトをそのまま利用する場合は、コマンドラインから以下のパラメータで実行します。

$ php 保存したスクリプト.php メールアドレス パスワード

数秒~10数秒後に以下の形式の配列がserializeされたテキストが出力されますので、出力をファイルへリダイレクトして保存するなりしてご利用下さい。

array(
ASIN => array(
'store' => ストア名,
'title' => 商品名,
'amount' => 注文数,
),
:

PHPコード

文字コードは「UTF-8」で保存してください。

<?php
require_once 'HTTP/Client.php';

list($script, $email, $pass) = $_SERVER['argv'];

$params = array(
'__mk_ja_JP' => 'カタカナ',
'path' => '/gp/associates/login/login.html',
'useRedirectOnSuccess' => '0',
'query' => '',
'mode' => '1',
'redirectProtocol' => '',
'pageAction' => '/gp/associates/login/login.html',
'disableCorpSignUp' => '',
'email' => $email,
'password' => $pass,
'action' => 'sign-in',
);

$queries = array();
foreach ($params as $k => $v) {
$queries[] = $k . '=' . urlencode($v);
}
//var_dump($queries);

$client = new HTTP_Client();


$client->get('https://affiliate.amazon.co.jp/gp/associates/login/login.html');
$response = $client->currentResponse();
//var_dump($response);
$client->post('https://affiliate.amazon.co.jp/gp/flex/sign-in/select.html?ie=UTF8&protocol=https', join('&', $queries), true);
$response = $client->currentResponse();
//echo $response['body'];

$yesterday = time() - 86400;
$query =   '__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&tag=&reportType=ordersReport&preSelectedPeriod=yesterday&periodType=exact&startMonth=0&startDay=1&startYear=2003&endMonth=' . (string)(date('m', $yesterday) - 1) . '&endDay=' . date('d', $yesterday) . '&endYear=' . date('Y', $yesterday) . '&submit.download_CSV.x=79&submit.download_CSV.y=9&submit.download_CSV=%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%EF%BC%88CSV%E5%BD%A2%E5%BC%8F%EF%BC%89';
//var_dump($query);
$client->post('https://affiliate.amazon.co.jp/gp/associates/network/reports/report.html', $query, true);
$response = $client->currentResponse();
$tsv = $response['body'];

mb_internal_encoding('UTF-8');
$rows = mb_split("\n", $tsv);
unset($rows[0], $rows[1]);
//var_dump($rows);

$k_store = 0;
$k_title = 1;
$k_asin  = 2;
$k_amount = 10;

$datas = array();
foreach ($rows as $row) {
$data = mb_split("\t", $row);
switch ($data[$k_store]) {
case '本':
case 'DVD':
case 'エレクトロニクス':
case 'おもちゃ&ホビー':
if (!isset($datas[$data[$k_asin]])) {
$datas[$data[$k_asin]] = array(
'store' => $data[$k_store],
'title' => $data[$k_title],
'amount' => 0,
);
}
$datas[$data[$k_asin]]['amount'] += $data[$k_amount];
break;
}
}
$amounts = array();
foreach ($datas as $data) {
$amounts[] = $data['amount'];
}
array_multisort($amounts, SORT_DESC, SORT_NUMERIC, $datas);

echo serialize($datas);

免責

このスクリプトの動作保証はいたしません。また、このスクリプトに起因して生じた損害について、法令等により免責が認められない場合を除いて、一切の責任を負わないものとします。全て自己責任においてご利用ください。

コメント / トラックバック

コメント / トラックバック 2 件

  1. としあき より:

    こんにちは
    参考にさせていただいております。
    $client->post('https://...
    にてサインインする時なのですが、レスポンスの中身は空白のサインインページでした・・・
    生成されたURL自体をブラウザーで読ませるとサインインできているのですが
    現在のアマゾンのほうで仕様が変わってしまっているということでしようか?

  2. neg より:

    感謝!感謝!感謝!
    ありがとう
    大変役に立ちます