2

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

4

2 回答 2

1

在不查看AmazonECSAPI 的情况下,我希望TotalResults1 返回一个仍然包含单个项目的数组;else 子句中的赋值 viaparseItem($response->Items->Item)将相应地失败(即books[]保持为空),因为$response->Items->Item它仍然是一个数组并且不能被解析为一个项目。

因此,您应该删除 else 子句并调整您的条件以测试 0 而不是(或>= 1当然),例如:

// [...]
if($response->Items->TotalResults > 0){
    foreach($response->Items->Item as $item)
        $books[] = parseItem($item);
}
// [...]

更新

Amazon ECS PHP 库Show first 10 results example证实了我的期望,结果循环的实现如下:

//check that there are items in the response
if (isset($response['Items']['Item']) ) {

    //loop through each item
    foreach ($response['Items']['Item'] as $result) {
        // [...]
    }
}
于 2012-02-13T07:10:41.467 回答
1

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

于 2012-02-20T19:06:42.607 回答