twitter sns クチコミ comments neta

2007/11/11 02:09:42

Amazonアフィリエイトのレポートを取得する

Liner Note - Amazonアソシエイトにニコニコ市場のような購入数・クリック数情報をつけてみる
を見て
「それrhacoなら簡単にできるよ!」
とか思ったので書いてみた。
Conveyorプラグインにして、cronで叩いてDBにぶち込むまでを全部Conveyorに任せちゃうってのもありかもしれないなぁ。

とりあえず、コードはこんな感じ。

<?php
if(!class_exists('Rhaco')) require_once 'rhaco/Rhaco.php';
Rhaco::import('network.http.Browser');

class AmazonReport
{
    var $base_url = 'https://affiliate.amazon.co.jp';
    var $browser;

    function AmazonReport($email, $password){
        $this->login($email, $password);
    }

    function login($email, $password){
        $browser = new Browser();
        $browser->get($this->base_url . '/gp/associates/login/login.html');
        $browser->setVariable('email', $email);
        $browser->setVariable('password', $password);
        $browser->submit('sign-in');
        return $this->browser =& $browser;
    }

    function getData($param = array()){
        return $this->parseXml($this->getXml($param));
    }

    function parseXml($xml){
        $tag = new SimpleTag();
        $tag->set($xml, 'Data');
        return $tag->toHash();
    }

    function getXml($param = array()){
        $this->browser->clearVariable();
        list($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
        $param_default = array(
            'ie' => 'UTF8',
            'reportType' => 'ordersReport',
            'periodType' => 'exact',
            'startMonth' => '1',
            'startDat' => '1',
            'startYear' => '2002',
            'endMonth' => $mon + 1,
            'endDay' => $mday,
            'endYear' => $year + 1900,
        );
        foreach($param as $k => $v){
            $param_default[$k] = $v;
        }
        $url = $this->base_url . '/network/reports/report.html/?' . http_build_query($param_default) . '&submit.download_XML';

        return $this->browser->get($url);
    }
}


んでもって、レポートを取得するときはこいつを使ってこんな感じに書く
<?php
require_once 'AmazonReport.php';

$email = '*@*.***';
$password = '****';

$amazon = new AmazonReport($email, $password);
$data = $amazon->getData();

foreach($data['Items']['Item'] as $item){
    var_dump($item);exit;
}


あとはDBにぶち込むなり何なりすれば簡単だね!!

  • Add Comment

    name:

    comment:

    question:
    1 + 1 = ?
    answer: