我在使用亚马逊 API 搜索 ISBN 时遇到一些问题。
该代码似乎适用于少数 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 搜索时它们不会返回任何结果
最佳答案
在不研究 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) {
// [...]
}
}
关于php - 使用 Amazon API 搜索 ISBN 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254745/