2

我正在使用以下代码进行亚马逊图书搜索,我有以下提到的 2 个问题: 1. 无法获得第 11 页,因为它显示 ItemPage 的值无效 2. 在搜索时,我得到一些没有 ISBN 号的图书,如何摆脱他们?我只想要那些有 ISBN 号的书。

$time = time() + 10000;
$method = 'GET';
$host = 'webservices.amazon.'.AWS_LANG;
$uri = '/onca/xml';
$slug["Service"] = "AWSECommerceService";
$slug["Operation"] = "ItemSearch";
$slug["SubscriptionId"] = AWS_API_KEY;
$slug["AssociateTag"] = AWS_ASSOCIATE_TAG;
$slug["SearchIndex"] = CATEGORY;
$slug["Condition"] = 'All';
$slug["Keywords"] = $query;
$slug["ItemPage"] = 1;
$slug["VariationPage"]=150;
$slug["TruncateReviewsAt"] = '500';
$slug["ResponseGroup"] = 'Images,ItemAttributes';
$slug["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z",$time);
$slug["Version"] = "2011-08-01";
ksort($slug);
$query_slug = array();
foreach ($slug as $slugs=>$value)
{
    $slugs = str_replace("%7E", "~", rawurlencode($slugs));
    $value = str_replace("%7E", "~", rawurlencode($value));
    $query_slug[] = $slugs."=".$value;
}
$query_slug = implode("&", $query_slug);
$signinurl = $method."\n".$host."\n".$uri."\n".$query_slug;
$signature = base64_encode(hash_hmac("sha256", $signinurl, AWS_API_SECRET_KEY, True));   
// Get Amazon Signature API
$signature = str_replace("%7E", "~", rawurlencode($signature));
$request = "http://".$host.$uri."?".$query_slug."&Signature=".$signature;
$response = file_get_contents($request);
$response = new SimpleXMLElement($response);

是否有任何其他 API 可以使用,因为此链接表示无法获得超过 10 页http://docs.aws.amazon.com/AWSECommerceService/latest/DG/PagingThroughResults.htmlhttp://www.textbookrentals.com/search/php这个网站正在正确处理搜索,我想要这样的东西。请建议。

谢谢贾亚

4

1 回答 1

1

这是无法做到的。根据您链接到http://docs.aws.amazon.com/AWSECommerceService/latest/DG/PagingThroughResults.html的页面上的文档:

那么,您如何获得第 973 页?你不能。更好的方法是提交一个更有针对性的新请求,并在响应中产生更少的项目。

原因很明显,因为当前 10 页很可能足以让用户找到他们正在寻找的最相关的商品时,亚马逊不想将他们的资源用于此类无聊的搜索。

您链接到的另一个页面显示来自内部数据库而不是亚马逊的结果,这很明显,当我点击商品时,我会比较商店之间的各种条件(新的、二手的等),有时亚马逊不显示向上。

我以前建过这样的网站。我建议您首先创建您自己的商品数据库,并且不要针对搜索结果即时对亚马逊运行搜索查询,除非您的数据库中不存在该商品。通过这种方式,您可以通过您的用户来构建您的数据库并减少资源占用。然后,对于同一搜索查询的未来请求,您只需在单击该项目时运行 Amazon 查询以获取最新的可用性信息。这将更快、更有效。

于 2013-11-17T04:23:54.900 回答