ホーム » ブログ » 2008年01月 » Amazonアソシエイトから全期間の商品注文数をぶっこ抜くPHPコードサンプル

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

2008-01-09 written by akiyan | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

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);

免責

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

2008-01-09 written by akiyan | 記事 | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

コメント

としあき - 2008-02-24 13:01:09

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

投稿



本文と関連性の無いコメントは削除することがあります。予めご了承ください。

トラックバック

このエントリへのトラックバックURLは
http://www.akiyan.com/cgi/mt/mt-tb.cgi/1434
です。トラックバック元のエントリに当サイトへのリンクが無い場合はトラックバックを削除することがあります。