PHPでAmazonのMWSを使用して,マケプレの出品情報を取得する

PHPでASINを指定して、Amazon.co.jpのサイトより、マーケットプレースに出品されている商品の情報を取得するサンプルのプログラムです。
データの取得にはAmazon Marketplace WebService(MWS)を使用しています。

Amazonから提供されているクライアントライブラリはサンプルコードが添付されているのですが、
内容が冗長で分かり辛いので書き直しました。



実行手順:
下記のサイトより、クライアントライブラリをダウンロードします。(タイトル右のボタンをクリック)
商品API セクション クライアントライブラリ – PHP – バージョン 2011-10-01


ダウンロードしたzipファイルを展開します。

Test.phpをダウンロードし、srcフォルダの下に置きます。
Test.zip


Test.phpの先頭4行に有るdefineを書き換えます。
セットする値はこちらの記事を参照してください。


windowsの場合,php.iniを編集します。

コマンドラインより”php Test.php”を実行します。
※APIの呼び出し上限は,20回/分です。



Amazonマーケットプレイス徹底活用

プログラムを実行すると、以下の様な結果が表示されます。

=====================================================================
Status :Success
ASIN   :4478312141
------------------------------------------------
コンディション   :中古品(良い)
出荷元           :FBA
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :15535 (高評価:95-97%)
出品数           :4
総額             :\1155 (送料:\0)
------------------------------------------------
コンディション   :中古品(Acceptable)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :1 (高評価:98-100%)
出品数           :1
総額             :\1155 (送料:\250)
------------------------------------------------
コンディション   :中古品(Acceptable)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :3037 (高評価:90-94%)
出品数           :1
総額             :\1155 (送料:\250)
------------------------------------------------
コンディション   :中古品(非常に良い)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :842 (高評価:98-100%)
出品数           :1
総額             :\1155 (送料:\250)
------------------------------------------------
コンディション   :中古品(良い)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :829 (高評価:98-100%)
出品数           :3
総額             :\1157 (送料:\250)
------------------------------------------------
...中略...
 
=====================================================================
Status :Success
ASIN   :4797330058
------------------------------------------------
コンディション   :中古品(良い)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :356695 (高評価:95-97%)
出品数           :4
総額             :\675 (送料:\250)
------------------------------------------------
コンディション   :中古品(非常に良い)
出荷元           :出品者
国内より発送     :Unknown
発送日数(最大)   :0-2 days
フィードバック数 :6 (高評価:98-100%)
出品数           :1
総額             :\675 (送料:\250)
------------------------------------------------
コンディション   :中古品(非常に良い)
出荷元           :出品者
国内より発送     :True
発送日数(最大)   :0-2 days
フィードバック数 :0 (高評価:Just Launched)
出品数           :1
総額             :\781 (送料:\250)





ちょっと長いですが、サンプルコードの中身です。
コードのライセンスはApache Licence 2.0なので、自由に改造してください。
(コードを引用する場合は本ページへのリンクを張っていただけると有難いです)

<?php
define('AWS_ACCESS_KEY_ID',     '値をセットしてください!!');
define('AWS_SECRET_ACCESS_KEY', '値をセットしてください!!');  
define('MERCHANT_ID',           '値をセットしてください!!');
define('MARKETPLACE_ID',        '値をセットしてください!!');
set_include_path( get_include_path() . PATH_SEPARATOR . 'MarketplaceWebServiceProducts/.' );    
 
 
// メイン処理の実行
main();
 
//****************************************************************************
// Function     : main
// Description  : メイン処理
//****************************************************************************
function main() {
 
    //--------------------------------
    // Webサービス情報の取得
    //--------------------------------
    $service = getService();
    //単体テスト用(MarketplaceWebServiceProducts/Mockのxmlファイルを使用)
    //$service = new MarketplaceWebServiceProducts_Mock();
 
 
    //-------------------------------
    // リクエストパラメータのセット
    //-------------------------------
    $asinList = new MarketplaceWebServiceProducts_Model_ASINListType();
    $asinList->setASIN( array( '4478312141', '4797330058' ) );
 
    $request = new MarketplaceWebServiceProducts_Model_GetLowestOfferListingsForASINRequest();
    $request->setSellerId( MERCHANT_ID );
    $request->setMarketplaceId( MARKETPLACE_ID );
    $request->setASINList( $asinList );
 
 
    //-------------------------------
    // MWSリクエストAPIの実行
    //-------------------------------
    try {
        $response = $service->getLowestOfferListingsForASIN($request);
    } catch (MarketplaceWebServiceProducts_Exception $ex) {
        echo("Caught Exception: "       . $ex->getMessage()    . "\n");
        echo("Response Status Code: "   . $ex->getStatusCode() . "\n");
        echo("Error Code: "             . $ex->getErrorCode() . "\n");
        echo("Error Type: "             . $ex->getErrorType() . "\n");
        echo("Request ID: "             . $ex->getRequestId() . "\n");
        echo("XML: "                    . $ex->getXML() . "\n");
        echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
    }
 
    //-------------------------------
    // API応答情報を表示する
    //-------------------------------
    showResponse( $response );
}
 
 
 
//****************************************************************************
// Function     : getService
// Description  : Webサービス情報の取得
// Return       : MarketplaceWebServiceProducts_Client  サービス情報
//****************************************************************************
function getService() {
 
    //---------------------------------
    // クラスのオートローディングを行う
    //---------------------------------
    function __autoload($className){
        $filePath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
        $includePaths = explode(PATH_SEPARATOR, get_include_path());
        foreach($includePaths as $includePath){
            if(file_exists($includePath . DIRECTORY_SEPARATOR . $filePath)){
                require_once $filePath;
                return;
            }
        }
    }
 
    // Web APIのエンドポイント(japan)
    $serviceUrl = "https://mws.amazonservices.jp/Products/2011-10-01";
 
    // proxy/retryの設定
    $config = array (
       'ServiceURL'    => $serviceUrl,
       'ProxyHost'     => null,
       'ProxyPort'     => -1,
       'MaxErrorRetry' => 3,
    );
 
    // Webサービスオブジェクトを生成
    $service = new MarketplaceWebServiceProducts_Client(
                AWS_ACCESS_KEY_ID,
                AWS_SECRET_ACCESS_KEY,
                'nanoappli.com_SampleApp',
                '1.0.0.0',
                $config);
 
    return $service;
}
 
 
 
//****************************************************************************
// Function     : showResponse
// Description  : Webサービス実行結果の表示
// Params       : $response WebAPI実行結果
//****************************************************************************
function showResponse( $response ) {
    $getLowestOfferListingsForASINResultList = $response->getGetLowestOfferListingsForASINResult();
 
    //--------------------------------------
    // 全てのASIN情報を表示するまで繰り返し
    //--------------------------------------
    foreach ($getLowestOfferListingsForASINResultList as $getLowestOfferListingsForASINResult) {
        echo ("=============================================================================\n");
 
        // 検索結果
        if ($getLowestOfferListingsForASINResult->isSetStatus()) {
            echo( "Status :" . $getLowestOfferListingsForASINResult->getStatus() . "\n");
        }
 
 
        //----------------
        // 商品の情報
        //----------------
        if ($getLowestOfferListingsForASINResult->isSetASIN()) {
            echo( "ASIN   :" . $getLowestOfferListingsForASINResult->getASIN() . "\n");
        }
        if ($getLowestOfferListingsForASINResult->isSetProduct()) { 
            $product = $getLowestOfferListingsForASINResult->getProduct();          
            if ($product->isSetSalesRankings()) { 
                $salesRankings = $product->getSalesRankings();
                $salesRankList = $salesRankings->getSalesRank();
                foreach ($salesRankList as $salesRank) {
                    if ($salesRank->isSetProductCategoryId()) {
                        echo("カテゴリID :" . $salesRank->getProductCategoryId() . "\n");
                    }
                    if ($salesRank->isSetRank()) {
                        echo("ランク :" . $salesRank->getRank() . "\n");
                    }
                }
            } 
 
            //-------------------
            // 出品情報
            //-------------------
            if ($product->isSetLowestOfferListings()) { 
                $lowestOfferListings = $product->getLowestOfferListings();
                $lowestOfferListingList = $lowestOfferListings->getLowestOfferListing();
 
                //-----------------------------------------
                // 取得した全出品情報を表示するまで繰り返し
                //-----------------------------------------
                foreach ($lowestOfferListingList as $lowestOfferListing) {
                    echo( "------------------------------------------------\n" );
 
                    //------------------
                    // 商品の状態
                    //------------------
                    if ($lowestOfferListing->isSetQualifiers()) { 
                        $qualifiers = $lowestOfferListing->getQualifiers();
                        if ($qualifiers->isSetItemCondition()) {
                            $condName    = getConditionName( $qualifiers->getItemCondition() );
                            $subCondName = "";
                            if ($qualifiers->isSetItemSubcondition()) {
                                $subCondName = "(" . getItemSubconditionName( $qualifiers->getItemSubcondition() ) . ")";
                            }
                            echo("コンディション   :" . $condName . $subCondName . "\n" );
                        }
 
 
                        if ($qualifiers->isSetFulfillmentChannel()) {
                            $name = getFulfillmentChannelName( $qualifiers->getFulfillmentChannel() );
                            echo("出荷元           :" . $name . "\n");
                        }
                        if ($qualifiers->isSetShipsDomestically()) {
                            echo("国内より発送     :" . $qualifiers->getShipsDomestically() . "\n");
                        }
                        if ($qualifiers->isSetShippingTime()) { 
                            $shippingTime = $qualifiers->getShippingTime();
                            if ($shippingTime->isSetMax()) {
                                echo("発送日数(最大)   :" . $shippingTime->getMax() . "\n");
                            }
                        } 
 
                        if ($lowestOfferListing->isSetSellerFeedbackCount()) {
                            echo("フィードバック数 :" . $lowestOfferListing->getSellerFeedbackCount() );
 
                            if ($qualifiers->isSetSellerPositiveFeedbackRating()) {
                                echo(" (高評価:" . $qualifiers->getSellerPositiveFeedbackRating() . ")");
                            }
                            echo ( "\n" );
                        }
                    }
                    if ($lowestOfferListing->isSetNumberOfOfferListingsConsidered()) {
                        echo("出品数           :" . $lowestOfferListing->getNumberOfOfferListingsConsidered() . "\n");
                    }
 
                    //------------------
                    // 価格情報
                    //------------------
                    if ($lowestOfferListing->isSetPrice()) { 
                        $price1 = $lowestOfferListing->getPrice();
                        if ($price1->isSetLandedPrice()) { 
                            echo("総額             :" . getPriceName( $price1->getLandedPrice() ) );
 
                        } 
                        if ($price1->isSetShipping()) { 
                            echo(" (送料:" . getPriceName( $price1->getShipping() ) . ")" );
                        } 
                        echo ( "\n" );
                    } 
                }
            } 
        } 
 
        if ($getLowestOfferListingsForASINResult->isSetError()) { 
            echo("エラーが発生しました\n");
            $error = $getLowestOfferListingsForASINResult->getError();
            if ($error->isSetType()) {
                echo("Type:" . $error->getType() . "\n");
            }
            if ($error->isSetCode()) {
                echo("Code:" . $error->getCode() . "\n");
            }
            if ($error->isSetMessage()) {
                echo("Message:" . $error->getMessage() . "\n");
            }
        } 
    }
}
 
 
//****************************************************************************
// Function     : getConditionName
// Description  : コンディション名(日本語)を取得する
//****************************************************************************
function getConditionName( $inStr ) {
    switch( $inStr ) {
        case "New":
            return "新品";
            break;
        case "Used":
            return "中古品";
            break;
        case "Collectible":
            return "コレクター品";
            break;
        case "Refurbished":
            return "再生品";
            break;
        default:
            return $inStr;
            break;
    }
}
 
 
//****************************************************************************
// Function     : getItemSubconditionName
// Description  : サブコンディション名(日本語)を取得する
//****************************************************************************
function getItemSubconditionName( $inStr ) {
    switch( $inStr ) {
        case "New":
            return "新品";
            break;
        case "Mint":
            return "ほぼ新品";
            break;
        case "Very Good":
        case "VeryGood":
            return "非常に良い";
            break;
        case "Good":
            return "良い";
            break;
        default:
            return $inStr;
            break;
    }
}
 
 
//****************************************************************************
// Function     : getFulfillmentChannelName
// Description  : 出荷元(日本語)を取得する
//****************************************************************************
function getFulfillmentChannelName( $inStr ) {
    switch( $inStr ) {
        case "Amazon":
            return "FBA";
            break;
        case "Merchant":
            return "出品者";
            break;
        default:
            return $inStr;
            break;
    }
}
 
 
//****************************************************************************
// Function     : getPriceName
// Description  : 価格(通貨単位付き)を取得する
//****************************************************************************
function getPriceName( $inData ) {
    $outStr = "";
 
    // 通貨単位のセット
    if ( $inData->isSetCurrencyCode() ) {
        switch ( $inData->getCurrencyCode() ) {
            case "JPY":
                $outStr .= "\\";
                break;
            case "USD":
                $outStr .= "$";
                break;
            default:
                $outStr .= "(" . $inData->getCurrencyCode() . ")";
                break;
        }
    }
 
    // 金額のセット
    if ($inData->isSetAmount()) {
        $outStr .= sprintf( "%.0lf", $inData->getAmount() );
    }
 
    return $outStr;
}

関連記事

7 Responses to “PHPでAmazonのMWSを使用して,マケプレの出品情報を取得する”

  1. hatori より:

    windowsのコマンドプロンプトで
    c:\xampp\phpに移動してプログラムを実行すると下記のエラーがでてしまいます。
    解決方法をご存じの方教えていただけると幸いです。

    Fatal error: Class ‘MarketplaceWebServiceProducts_Client’ not found in C:\xampp\
    htdocs\amazon-mws-v20111001-php-2012-09-28._V386158552_\src\Test.php on line 96

    • nano より:

      > hatoriさん

      hatoriさんがどこまで調査されたのかがコメントの内容だと分からないので、確認の意味を含めて状況を整理します。

      1.表示されたエラーですが、MarketplaceWebServiceProducts_Clientクラスが見つからないという内容です。
      2.MarketplaceWebServiceProducts_Clientクラスは、MarketplaceWebServiceProducts\Client.phpファイルで定義されています。
      3.Client.phpファイルは、Test.phpにあるset_include_path()と、__autoload()によって取り込まれるはずです。



      次に確認なのですが…

      確認1:
      “C:\xampp\htdocs\amazon-mws-v20111001-php-2012-09-28._V386158552_\src\MarketplaceWebServiceProducts”フォルダに,”Client.php”は有りますか?

      確認2:
      試しに、以下の2行をTest.phpの先頭付近に書いてみてらエラーは解消されないでしょうか?
      (場所をフルパスで指定して、client.phpを自前で読み込んでいます)
      set_include_path( get_include_path() . PATH_SEPARATOR . ‘c:\amazon-mws-v20111001-php-2012-09-28._V386158552_\src’ );
      require_once( ‘c:\xampp\htdocs\amazon-mws-v20111001-php-2012-09-28._V386158552_\src\MarketplaceWebServiceProducts\Client.php’ );

  2. hatori より:

    aka様
    ご回答ありがとうがございます。
    確認1:
    “C:\xampp\htdocs\amazon-mws-v20111001-php-2012-09-28._V386158552_\src\MarketplaceWebServiceProducts”フォルダに,”Client.php”はありました。

    確認2:
    Test.phpの先頭付近に、お教えいただいた2行を追加してみましたが
    今度は
    Parse error: syntax error, unexpected ‘:’ in C:\xampp\htdocs\amazon-mws-v2011100
    1-php-2012-09-28._V386158552_\src\Test.php on line 4
    というエラーが出てしまいました。
    初歩的なことですが
    お教えいただけますと幸いです。

    • nano より:

      hatoriさん

      すみません。
      blogのコメント機能の制約で、貼り付けたコードが一部全角文字に替わってしまってました。
      パスを指定しているところのシングルクォーテーション(「’」記号)が全角になっているので、半角にしてから再度試してみてください。

  3. […] PHPでAmazonのMWSを使用して,マケプレの出品情報を取得する http://nanoappli.com/blog/archives/4371 nanoappli.com&nbsp; 6 users […]

  4. […] 参考にしたサイトはこちらです。 参考 PHPでAmazonのMWSを使用して,マケプレの出品情報を取得するnanoblog(ナノブログ) […]

  5. […] 参考にしたサイトはこちらです。 参考 PHPでAmazonのMWSを使用して,マケプレの出品情報を取得するnanoblog(ナノブログ) […]

PHPでAmazon MWS APIで取得したXMLのカート価格を抜き出してブラウザに表示してみる。 | wate blog へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。