Проблемы с использованием Amazon API для поиска ISBN - PullRequest
2 голосов
/ 13 февраля 2012

У меня несколько проблем с использованием Amazon API для поиска ISBN.

Код выглядит так, что он работает на FEW isbn's и возвращает некоторые результаты, однако большинство книг (в основном, справочных / справочных изданий), которые я ищу через ISBN, не дают результатов.

Для проверки я получаю номер ISBN-10 от Amazon. Я также тогда проверил, ища это 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 возвращают результаты. Несмотря на то, что эти книги существуют в Amazon, они не возвращают никаких результатов при поиске через API

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Проблемы были в книгах, в которых не было редакционных статей.Написанный код работает нормально, но нужны исключения для книг, возвращаемых без всей информации.

1 голос
/ 13 февраля 2012

Не заглядывая в API AmazonECS, я бы ожидал, что TotalResults из 1 вернет массив, содержащий еще один элемент; назначение в вашем предложении else через parseItem($response->Items->Item) соответственно не будет выполнено (т.е. books[] остается пустым), потому что $response->Items->Item по-прежнему является массивом и не может быть проанализирован в элементе.

Следовательно, вы должны отказаться от предложения else и настроить свое состояние так, чтобы вместо этого проверять на 0 (или, конечно, >= 1), например ::10000*

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

Обновление

Показать первые 10 результатов пример 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) {
        // [...]
    }
}
...