AIMSを使ってレポートをダウンロードする

前回、出品一覧レポートの作成をリクエストするソースを公開したが、今回はそのレポートをダウンロードするために必要なリクエストIDを取得する方法について。

で、本題に入る前に。
前回、書き忘れていたのだが、ここで公開しているAIMS関連のスクリプトをレンタルサーバ等、第3者からアクセス可能な環境に置くのはNG。
最悪の場合、勝手に返金、出品、削除、価格の変更をされる、ということがありえます。
パスワードを暗号化していてもNG。
試す場合は必ずローカル環境で。

また、基本的にスクリプト言語の学習が目的なので、例えば「Perlで書かれたマケプレ用在庫管理システム」のようなものを公開する予定は今のところないっす。

で、本題。
リクエストIDを取得するために必要なのは、前回同様 Cookie、認証情報、取得したいレポートの種類と取得するレポートステイタスの数。
Cookieは前回使用したもの。
認証情報(Authorization)も前回と同じく、Eメールアドレスとパスワードを':'で連結しBase64エンコードしたもの。
取得したいレポートの種類(ReportName)は、ここでは出品一覧レポートなので、「OrderListings」になる。
レポートの数には取得したいレポートステイタスの数(NumberOfReports)を設定する。 デフォルト(設定しない場合)は10 のようだ。 これらをヘッダーに含める。

あとは、
https://vendornet.amazon.co.jp/exec/panama/seller-admin/manual-reports/get-report-status
にリクエストを投げるだけ。

正常であれば、以下のような書式で結果が返ってくる。

<Reports>
<Report> reportstarttime=11-03-2006:16-01-55 reportendtime=11-03-2006:16-01-55 reportid=nnnnnnnn </Report>
</Report>.....</Report>
</Report>.....</Report>
</Report>.....</Report>
</Reports>

ReportはNumberOfReportsで指定した数だけ返ってくる。

reportstarttimeとreportendtimeは出品一覧レポートの場合は同じ値である。ちなみに形式は、月-日-年:時-分-秒のようだ。
reportidは実際にレポートをダウンロードするときに必要になる。
実際の運用では、これらの値をDB等で管理することになるだろう。

返ってきた結果をもう少し見易くするために、XML::Simpleをつかってごにょごにょ。
XML::Simpleは使わず、正規表現のみのほうがいいような気もするが。

実行結果はこんな感じ。
データはダミー。

start:  2006-11-03 16:01:55
end:    2006-11-03 16:01:55
id:     nnnnnnnn

start:  2006-11-02 14:35:30
end:    2006-11-02 14:35:30
id:     nnnnnnnn

start:  2006-11-01 07:33:26
end:    2006-11-01 07:33:26
id:     nnnnnnnn

サンプルソースは以下のとおり。
*このままでは動かないので必要な箇所は編集が必要。

#!/usr/bin/perl

use strict;
use warnings;

use HTTP::Headers;
use LWP::UserAgent;
use MIME::Base64;
use XML::Simple;

# リクエストを投げるURL
my $url = "https://vendornet.amazon.co.jp/exec/panama/seller-admin/manual-reports/get-report-status";

# 認証情報。自分のEメールアドレスとパスワードに変更する。
my $auth = MIME::Base64::encode('test@example.com:password');

# レポートの種類 OrderListings=出品一覧
my $report_name = "OrderListings";

# 取得するレポートステイタス数。
my $num = "3";

# Cookie 
my $session_id      = "session-id=nnn-nnnnnnn-nnnnnnn;";
my $session_id_time = "session-id-time=nnnnnnnnnn;";
my $ubid_main       = "ubid-main=nnn-nnnnnnn-nnnnnnn";

my $ua = LWP::UserAgent->new;
my $header = HTTP::Headers->new(
                 Authorization=>"Basic $auth",
		 ReportName=>$report_name,
		 NumberOfReports=>$num,
		 Cookie=>"$session_id $session_id_time $ubid_main"
	     );

my $req = HTTP::Request->new(POST=>$url, $header);

my $res = $ua->request($req);
if ($res->code eq '202') {
    my $xs = XML::Simple->new;
    my $ref = $xs->XMLin($res->content, FORCE_ARRAY=>['Report']);
    foreach my $r (@{$ref->{Report}}) {
	my ($start, $end, $id) = split(' ', $r);
	(undef, $start) = split('=', $start);
	(undef, $end) = split('=', $end);
	(undef, $id) = split('=', $id);
	$start = &format($start);
	$end = &format($end);
	print "start:  $start\n";
	print "end:    $end\n";
	print "id:     $id\n\n";
    }
}
else {
    print $res->code, "\n";
}

sub format {
    my $val = shift;
    my ($date, $time) = split(':', $val);
    my ($mon, $day, $year) = split('-', $date);
    my $mydate = "$year-$mon-$day";
    $time =~ s/-/:/g;

    return "$mydate $time";
}

正規表現、まじめに勉強したほうがよさそうだ。
以前、これ
詳説 正規表現 第2版
詳説 正規表現 第2版 の第1版を持っていたのだけど、第2版が出たので売ったのだが、結局買ってねーや。 原書ではすでに第3版が出ているので、第2版の日本語訳版を買うか第3版の訳が出るまで待つか迷うところ。
Mastering Regular Expressions (Mastering)
Mastering Regular Expressions (Mastering)

前:AIMSを使う
次:障害
メイン

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Menu

Amazonマーケットプレイス

About

2006年11月03日 16:03に投稿されたエントリのページです。

ひとつ前の投稿は「AIMSを使う」です。

次の投稿は「障害」です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Amazon.co.jp

るろうに剣心 DVD-BOX 全集・剣心伝

アニプレックス
価格: ¥ 42,000
もののけ姫

ブエナ・ビスタ・ホーム・エンターテイメント
価格: ¥ 3,860
機動戦士ガンダムDVD-BOX 2

バンダイビジュアル
価格: ¥ 25,200
名探偵ホームズ DVD-BOX

ジェネオン エンタテインメント
価格: ¥ 15,609
スレイヤーズNEXT DVD-BOX 期間限定版

キングレコード
価格: ¥ 18,073
どろろ Complete BOX

コロムビアミュージックエンタテインメント
価格: ¥ 7,800
ガンバの冒険 DVDBOX

ハピネット
価格: ¥ 19,553
serial experiments lain TV-BOX

ジェネオン エンタテインメント
価格: ¥ 10,710
ザ・シンプソンズ シーズン 1 DVD コレクターズBOX

20世紀フォックス・ホーム・エンターテイメント・ジャパン
価格: ¥ 7,854
Powered by
Movable Type