Php 获取Amazon产品API上的所有项目
亚马逊的产品API限制我们每页只能获取10个项目,并且在特定查询中只能获取10个页面 我开发了一个几乎可以得到所有物品的代码; 首先,我提供了一个如下所示的参数:Php 获取Amazon产品API上的所有项目,php,amazon-web-services,amazon-product-api,Php,Amazon Web Services,Amazon Product Api,亚马逊的产品API限制我们每页只能获取10个项目,并且在特定查询中只能获取10个页面 我开发了一个几乎可以得到所有物品的代码; 首先,我提供了一个如下所示的参数: $item_params = [ "Service" => "AWSECommerceService", "Operation" => "ItemSearch", "AWSAccessKeyId" => env('AWS_ACCES
$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"
];
然后,代码将通过指定项目的最大和最小价格来限制搜索,从而获得该浏览节点(类别)下的所有项目,按价格排序(desc)
伪代码(原始代码太长)
}
但是,我遇到了这种情况:
请求输出示例(假设所有项目都来自amazon):
其中,从n到n+120的乘积相等。这将为我的getProducts
函数创建一个无限循环。我怎样才能避免这种情况?知道每个请求只返回10个项目,并且只有10页
我怎样才能避免这种情况
我认为你不能仅仅使用价格。您必须使用其他关键字将搜索划分为多个子搜索。例如,如果您正在搜索“笔记本电脑”,则应在“笔记本电脑华硕”、“笔记本电脑戴尔”等网站上搜索
您还可以根据浏览节点ID进行筛选,因此,如果结果来自多个浏览节点,则可以执行两个或更多搜索
我怎样才能避免这种情况
我认为你不能仅仅使用价格。您必须使用其他关键字将搜索划分为多个子搜索。例如,如果您正在搜索“笔记本电脑”,则应在“笔记本电脑华硕”、“笔记本电脑戴尔”等网站上搜索
您还可以根据浏览节点ID进行筛选,因此,如果结果来自多个浏览节点,则可以执行两个或更多搜索 添加ItemPage参数并在循环中递增它。你应该能够得到多达100个独特的ASIN(10页,每页10个产品)
$page=1;
而($page“AWSECommerceService”,
“操作”=>“项目搜索”,
“AWSAccessKeyId”=>env('AWS\u ACCESS\u KEY\u ID'),
“AssociateTag”=>env('AWS\u Associatet\u TAG\u ID'),
“搜索索引”=>“家庭花园”,
“ResponseGroup”=>“ItemAttributes、SalesRank、Offers”,
“排序”=>“-价格”,
“BrowseNode”=>$item_参数['BrowseNode'],
“MaximumPrice”=>$max_价格,
“最低价格”=>“0”,
“ItemPage”=>$page
];
//执行查询并保存数据
//递增页码
$page++;
}
添加ItemPage参数并在循环中递增。您最多可以获得100个独特的ASIN(10页,每页10个产品)
$page=1;
而($page“AWSECommerceService”,
“操作”=>“项目搜索”,
“AWSAccessKeyId”=>env('AWS\u ACCESS\u KEY\u ID'),
“AssociateTag”=>env('AWS\u Associatet\u TAG\u ID'),
“搜索索引”=>“家庭花园”,
“ResponseGroup”=>“ItemAttributes、SalesRank、Offers”,
“排序”=>“-价格”,
“BrowseNode”=>$item_参数['BrowseNode'],
“MaximumPrice”=>$max_价格,
“最低价格”=>“0”,
“ItemPage”=>$page
];
//执行查询并保存数据
//递增页码
$page++;
}
API的必需属性不是“关键字”。如果将其留空,您将收到BrowseNode中的所有项目-一次10个项目。因此,您不需要将“laptop”、“laptop asus”、“laptop dell”等关键字放入“关键字”不是API的必需属性。如果将其留空,您将收到BrowseNode中的所有项目-一次10个项目。因此,您不需要输入诸如“laptop”、“laptop asus”、“laptop dell”等关键字
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
$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++;
}