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」でした。

コメントを残す