麻烦亚马逊图书搜索API PHP

时间:2013-10-29 12:21:06

标签: php api search phpunit amazon

我正在使用以下代码进行亚马逊图书搜索,我有两个问题如下: 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.html吗? http://www.textbookrentals.com/search/php这个网站正在正确处理搜索,我想要这样的东西。请建议。

由于 再也

1 个答案:

答案 0 :(得分:1)

这不可能。根据您链接到http://docs.aws.amazon.com/AWSECommerceService/latest/DG/PagingThroughResults.html的页面上的文档:

  

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

原因显然是因为亚马逊不希望将这些资源用于这样的无聊搜索,因为前10页很可能足以让用户找到他们正在寻找的最相关的项目。

您链接的其他页面显示内部数据库和非亚马逊的结果,这一事实很明显,当我点击这些项目时,我会在商店之间进行各种条件(新的,使用过的等)的对比,有时甚至亚马逊没有出现。

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