使用Amazon API搜索ISBN的问题

时间:2012-02-13 02:07:43

标签: php api soap amazon-web-services isbn

我在使用亚马逊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进行搜索时,它们不会返回任何结果

2 个答案:

答案 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 resultsAmazon 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)

问题是那些没有社论的书籍。编写的代码工作正常,但在没有所有信息的情况下返回的书籍需要例外。