F.Ko-Jiの「一秒後は未来」

TSV形式でダウンロードしたAmazonアソシエイトのレポートをPHPで集計する

このブログを経由してAmazonで一番売れたものを調べようとしたのですが、どうもAmazonアソシエイトで表示されるレポートは、同じ商品であっても紹介料率や価格が違うとまとまってくれません。

そこでTSV形式でダウンロードしたレポートを適当にPHPで集計してみることにしました。

書いたプログラムは以下。同じASINコードの商品をまとめて、発送済み商品数と紹介料を商品ごとに足しあわせています。

<?php

$fp = fopen('report.txt', 'r');

// report.txtの最初の2行は不要なので
fgets($fp);
fgets($fp);

$report = array();
while ($row = fgetcsv($fp, 0, "\t")) {
    $asin = (string)$row[2];
    if (!isset($report[$asin])) {
        $report[$asin] = array(
                               'asin' => $asin,    // ASIN
                               'name' => $row[1],  // 商品名
                               'num' => $row[8],   // 発送済み商品数
                               'fee' => $row[10],  // 紹介料
                               );
    } else {
        $report[$asin]['num'] += $row[8];
        $report[$asin]['fee'] += $row[10];
    }
}

// ソート
$num = array();
$fee = array();
foreach ($report as $row) {
    $num[] = $row['num'];
    $fee[] = $row['fee'];
}
array_multisort($num, SORT_DESC, $report);

// 出力
foreach ($report as $row) {
    echo $row['num'] . ', ' . $row['name'] . "\n";
}

これを実行すると、発送済み商品数が多い順にずらっと出力されます。

PHPの場合 fgetcsv という関数でCSV形式のファイルを1行ずつ読み込めますが、その第3引数に区切り文字を与えることができるので、そこにタブ文字「\t」を与えることでTSV形式のファイルを読めるようになります。

多次元配列のソートは array_multisort という関数を使います。上記のコードでは $report という配列をキー「num」の降順でソートしています。もし紹介料順でソートしたければ、array_multisort の第1引数を $fee に変えます。

ちなみに集計した結果、このブログ経由でよく売れた商品は「Canon デジタルカメラ Power Shot S90 PSS90」でした。

4839933146
よくわかるPHPの教科書

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など