获取Amazon Product API上的所有项目

时间:2016-02-06 17:19:44

标签: php amazon-web-services amazon-product-api

亚马逊的产品API限制我们每页只能获得10个项目,而某个查询只能获得10个页面。

我开发了几乎可以获得所有项目的代码; 首先,我提供了一个看起来像这样的参数:

    $item_params = [
            "Service" => "AWSECommerceService",
            "Operation" => "ItemSearch",
            "AWSAccessKeyId"    => env('AWS_ACCESS_KEY_ID'),
            "AssociateTag"      => env('AWS_ASSOCIATE_TAG_ID'),
            "SearchIndex" => "HomeGarden",
            "ResponseGroup" => "ItemAttributes,SalesRank,Offers",
            "Sort" => "-price",
            "BrowseNode" => $item_params['BrowseNode'],
            "MaximumPrice" => $max_price,
            "MinimumPrice" => "0"
        ];

然后,代码将通过指定项目的 MAX和MIN Price 来获取该浏览节点(类别)下的所有项目,按价格分类(desc)限制搜索。

伪代码(原始代码太长)

function getProducts($item_params, $max_price = null){

    $products = //request to amazon
    foreach ($product as $key=>$value){
       //add product to db
    }

    // if the total number of results on the query is not equal to zero, continue looping
    if (!$products->totalResults() == 0){
      $product = //get the first lowest priced item on the db

      $this->getProducts($item_params, $product->price);
    }

}

但是我遇到了这种情况:

示例请求输出(假设来自亚马逊的所有项目):

ASIN(unique id) | Price 

1     |  201
2     |  194
3     |  195
.
.
n     | 33
n+1   | 33
n+2   | 33
.    
n+120 | 33
n+121 | 34
n+122 | 35 

其中n至n + 120的乘积相等。这将为我的getProducts函数创建一个无限循环。我怎么能避免这个?知道每个请求只返回10个项目,而且只有10个页面。

2 个答案:

答案 0 :(得分:0)

  

我该如何避免这种情况?

我不认为你可以只用价格。您必须使用其他关键字将搜索划分为多个子搜索。例如,如果您正在搜索“笔记本电脑”,而是搜索“笔记本电脑华硕”,“笔记本电脑戴尔”等。

您还可以对“浏览”节点ID进行过滤,因此,如果结果来自多个浏览节点,则可以执行两次或更多次搜索。

答案 1 :(得分:0)

添加ItemPage参数并在循环中递增它。您应该能够获得多达100个独特的ASIN(每页10个产品10页)。

 $page = 1;
 while($page <= 10) {
      $item_params = [
        "Service" => "AWSECommerceService",
        "Operation" => "ItemSearch",
        "AWSAccessKeyId"    => env('AWS_ACCESS_KEY_ID'),
        "AssociateTag"      => env('AWS_ASSOCIATE_TAG_ID'),
        "SearchIndex" => "HomeGarden",
        "ResponseGroup" => "ItemAttributes,SalesRank,Offers",
        "Sort" => "-price",
        "BrowseNode" => $item_params['BrowseNode'],
        "MaximumPrice" => $max_price,
        "MinimumPrice" => "0",
        "ItemPage" => $page
    ];

   // execute query and save data
   //increment page number
   $page++;
   }