サイトマップ

このサイトについて
Amazonマーケットプレイス、Yahoo!オークションを便利に利用するための情報やツールを提供しています。
Amazonマーケットプレイス
出品者情報、出品一覧、各種ランキング等を検索、閲覧できます。
Amazonマーケットプレイス用ツール
出品物一覧表示スクリプト。出品者ID表示スクリプト。携帯検索等。

VBAからAIM APIを使って注文履歴、出品一覧レポートを作成する

実際にVBAからAIM APIを使用しレポートを作成してみます。

レポートの作成は簡単で、レポート作成用URLにリクエストを投げるだけです。
但し、リクエスト時に適切なヘッダー値を設定しておく必要があります。

注文履歴のレポートを作成する場合、リクエストは以下のようになります。

POST https://vendornet.amazon.co.jp/exec/panama/seller-admin/manual-reports/generate-report-now
Authorization: Basic base64EncodedEmailPasswordString==
Content-Type: text/xml
Cookie: x-main=YvjPkwfntqDKun0QEmVRPcTTZDMe?Tn?; ubid-main=002-8989859-9917520; ubid-tacbus=019-5423258-4241018;xtacbus=vtm4d53DvX@Sc9LxTnAnxsFL3DorwxJa; ubid-tcmacb=087-8055947-0795529; ubid-ty2kacbus=161-5477122-2773524; sessionid=087-178254-5924832; session-id-time=950660664
ReportName: Order
NumberOfDays: 60

これを実際にVBで記述すると以下の様になります。
なお、プログラムを記述する場所ですが、私の場合は標準モジュール内に記述しています。
方法は、プロジェクトウィンドウで右クリック、[挿入]-[標準モジュール]を選択するとModule1が追加されます。
このままだとわかりにくいので、プロジェクトウィンドウの下にあるプロパティで(オブジェクト名)をaimに変更しました。
あとはプロジェクトウィンドウでaimをダブルクリックし、以下のコードを記述します。
'で始まる行はコメントです。

Sub generate()
    '最初、XMLHTTPを使っていましたが、出品一覧のレポートが作成されない、レポートをダウンロードできないという現象が起きました。ServerXMLHTTPだと問題ありません。
    'XMLHTTPとServerXMLHTTPの違いについてはこちらに説明があります。
    'ServerXMLHTTP に関してよく寄せられる質問 (FAQ)
    'http://support.microsoft.com/kb/290761/ja
    Dim request As ServerXMLHTTP
    Set request = CreateObject("MSXML2.ServerXMLHTTP")
 
    'レポート生成時にはこのURLにリクエストを投げます。
    Dim url As String
    url = "https://vendornet.amazon.co.jp/exec/panama/seller-admin/manual-reports/generate-report-now"
 
    'レポート生成用URLにPOSTします。
    '第一引数はHTTPメソッドを指定します。必ずPOSTとします。
    '第二引数にはレポート生成のURLを指定します。
    '第三引数には非同期通信を行うかどうかを指定します。ここではFalseにしておきます。
    request.Open "POST", url, False
 
    '各ヘッダーの設定です。
    'Content-Typeはtext/xmlとします。
    request.setRequestHeader "Content-Type", "text/xml"
 
    'ここは認証の部分です。メールアドレスとパスワードをBase64エンコードしたものを指定します。詳しくは後述。
    'このままでは当然アクセス拒否されます。
    request.setRequestHeader "Authorization", "Basic base64EncodedEmailPasswordString=="
 
    'クッキーの設定です。Guide to using Amazon Inventory Management APIに掲載されていたものをそのまま使用しています。
    request.setRequestHeader "Cookie", "x-main=YvjPkwfntqDKun0QEmVRPcTTZDMe?Tn?; ubid-main=002-8989859-9917520; ubid-tacbus=019-5423258-4241018;xtacbus=vtm4d53DvX@Sc9LxTnAnxsFL3DorwxJa; ubid-tcmacb=087-8055947-0795529; ubid-ty2kacbus=161-5477122-2773524; session-id=087-178254-5924832; session-id-time=950660664"
 
    'レポートの種類を指定します。注文履歴の場合はOrder、出品一覧の場合はOpenListingsあるいはOpenListingsLiteあるいはOpenListingsLiterを指定します。
    request.setRequestHeader "ReportName", "Order"
 
    '注文履歴の場合は、過去何日間のレポートを作成するか指定します。15、30、60のいずれかで指定します。
    request.setRequestHeader "NumberOfDays", "60"
 
    'リクエストを送信します。
    request.send
 
    'レスポンスの内容をVBエディタのイミディエイトウィンドウに表示します。
    'レポートの生成に成功したばあい、<Status>SUCCESS</Status>と表示されます。
    Debug.Print StrConv(request.responseBody, vbUnicode)
 
    '後始末
    Set request = Nothing
End Sub

認証の部分は自分で設定する必要があります。
つまり、この行の太字の部分です。

request.setRequestHeader "Authorization", "Basic base64EncodedEmailPasswordString=="

この部分にはAmazonマーケットプレイスで使用している自分のメールアドレスとパスワードを":"で結合したものをBase64エンコードしたものを記述することになります。
仮りにメールアドレスを
test@example.com
パスワードを
password
としている場合
test@example.com:password
をBase64エンコードします。

ただ、残念なことにVBAでBase64エンコード変換するには、自力でプログラムを書く必要があります。
練習がてらに頑張って自分で書いてみてください。
"VBA Base64 エンコード"あたりで検索するとそれらしきものがヒットするので参考にするのもいいでしょう。

ちなみにRubyだと、

$ ruby -e 'puts ["test@example.com:password"].pack("m")'

を実行するだけで、

dGVzdEBleGFtcGxlLmNvbTpwYXNzd29yZA==

と、Base64エンコードされた結果が出力されます。

なお、これはあくまでエンコード(符号化)された値です。
暗号化ではありませんので取扱いに注意してください。
上のRubyの例だと

$ ruby -e 'puts "dGVzdEBleGFtcGxlLmNvbTpwYXNzd29yZA==".unpack("m")[0]'

とするだけで

test@example.com:password

と出力されます。

さて、このBase64エンコードされた値を次のように記述します。

request.setRequestHeader "Authorization", "Basic dGVzdEBleGFtcGxlLmNvbTpwYXNzd29yZA=="

これで、実行するとイミディエイトウィンドウに

<Status>SUCCESS</Status>

と表示されるはずです。

しばらくすると件名「order fulfillment レポート作成完了のお知らせ」というメールが届くことでしょう。
これでレポート作成の完了です。

次はレポートのダウンロードですが、その前にレポートが生成されたかどうかAIM APIを使って確認する方法について解説します。