2016-02-06 78 views
0

亚马逊的产品API限制我们每页只能获得10个商品,而在某个查询中只能获得10个商品页面。获取亚马逊产品API上的所有商品

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

$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" 
     ]; 

然后,该代码将获得浏览节点下的所有项目(类别),排序方式PRICE(DESC)还通过指定MAX和MIN价格的项目来限制搜索。

伪码(原代码太长)

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个页面。

回答

0

我该如何避免这种情况?

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

您也可以筛选浏览节点ID,所以如果您的结果来自多个浏览节点,你可以做两个或更多的搜索。

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++; 
    }