我在使用亚马逊API搜索ISBN时遇到了一些问题。
代码接缝适用于FEW isbn并且返回一些结果但是我通过ISBN搜索的大多数书籍(主要是事实/参考书籍)都没有返回结果。
测试我从亚马逊获得ISBN-10号码。我也通过他们自己的搜索搜索这个isbn进行测试。
这是我们用来获得结果的代码..我不认为任何人都可以发现一个漏洞?
function getBooks($isbn){
$client = new AmazonECS('AWS_API_KEY', 'AWS_API_SEECRET_KEY', 'co.uk', 'tutorp-21');
$response = $client->responseGroup('Small,Images,EditorialReview')->category('Books')->search($isbn);
$books = array();
if($response->Items->TotalResults > 1){
foreach($response->Items->Item as $item)
$books[] = parseItem($item);
}else if($response->Items->TotalResults == 1){
$books[] = parseItem($response->Items->Item);
}
return $books;
}
干杯
编辑:只是为了澄清......我们面临的问题是只有一些ISBN号会返回结果。即使这些书籍存在于亚马逊,但是当通过API进行搜索时,它们不会返回任何结果
答案 0 :(得分:1)
如果不查看AmazonECS
API,我希望TotalResults
为1,以返回包含单个项目的数组;通过parseItem($response->Items->Item)
在您的else子句中的赋值将相应失败(即books[]
仍为空),因为$response->Items->Item
仍然是一个数组,无法解析为项目。
因此你应该删除else子句并调整你的条件来测试0(当然还是>= 1
),例如:
// [...]
if($response->Items->TotalResults > 0){
foreach($response->Items->Item as $item)
$books[] = parseItem($item);
}
// [...]
Show first 10 results的Amazon ECS PHP Library示例证实了我的期望,结果循环的实现如下:
//check that there are items in the response
if (isset($response['Items']['Item']) ) {
//loop through each item
foreach ($response['Items']['Item'] as $result) {
// [...]
}
}
答案 1 :(得分:1)
问题是那些没有社论的书籍。编写的代码工作正常,但在没有所有信息的情况下返回的书籍需要例外。