亚马逊的产品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个页面。
答案 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++;
}