16.3. Zend_Service_Amazon
Пред. | Глава 16. Zend_Service | След.

## 16.3. Zend_Service_Amazon

### 16.3.1. Введение

`Zend_Service_Amazon` является простым API для использования веб-сервиса Amazon. `Zend_Service_Amazon` имеет два API: традиционный, который похож на собственный интерфейс Amazon, и более простой "API запросов", который позволяет легко строить даже сложные поисковые запросы.

`Zend_Service_Amazon` дает возможность получать информацию, предоставляемую на сайтах Amazon.com, через API веб-сервисов Amazon. Эта информация включает в себя:

- Информацию о товарной позиции, такую, как изображения, описания, цены и т.д.
- Рецензии и покупательские отзывы
- Аксессуары и похожие товары
- Предложения Amazon.com
- Списки ListMania

Для того, чтобы использовать `Zend_Service_Amazon`, необходимо иметь ключ разработчика к API Amazon. Чтобы получить ключ и более подробную информацию, обратитесь к сайту веб-сервисы Amazon.

| Замечание
Ваш ключ разработчика к API Amazon связан с вашим аккаунтом в Amazon, поэтому позаботьтесь о том, чтобы хранить ваш ключ в безопасности.

Пример 16.2. Поиск с использованием традиционного API

В данном примере мы ищем книги по PHP на Amazon и выводим результат в цикле.

    <?php
    require_once 'Zend/Service/Amazon.php';
    $amazon = new Zend_Service_Amazon('AMAZON_API_KEY&');
    $response = $amazon->itemSearch(array('SearchIndex' => 'Books', 'Keywords' => 'php'));
    foreach ($response as $r) {
        echo $r->Title .'<br />';
    }
    ?>

Пример 16.3. Поиск с использованием API запросов

Здесь мы также ищем книги по PHP на Amazon, но используя API запросов, который имеет сходство с паттерном проектирования Fluent Interface.

    <?php
    require_once 'Zend/Service/Amazon/Query.php';
    $query = new Zend_Service_Amazon_Query('AMAZON_API_KEY');
    $query->category('Books')->Keywords('PHP');
    $results = $query->search();
    foreach ($results as $result) {
        echo $result->Title . '<br />';
    }
    ?>

### 16.3.2. Коды стран

По умолчанию `Zend_Service_Amazon` устанавливает соединение с веб-сервисом Amazon для Соединенных Штатов ("`US`"). Для установки соединения из другой страны просто укажите соответствующий код страны в качестве второго параметра при вызове конструктора:

Пример 16.4. Выбор страны для веб-сервиса Amazon

    <?php
    // Установка соединения с Amazon в Японии
    require_once 'Zend/Service/Amazon.php';
    $amazon = new Zend_Service_Amazon('AMAZON_API_KEY', 'JP');
    ?>

| Замечание
Возможные коды стран: `CA`, `DE`, `FR`, `JP`, `UK` и `US`.

### 16.3.3. Поиск товара по его коду ASIN

Метод `itemLookup()` дает возможность извлекать определенный товар Amazon, если известен его код ASIN.

Пример 16.5. Поиск товара по его коду ASIN

    <?php
    require_once 'Zend/Service/Amazon.php';
    $amazon = new Zend_Service_Amazon('AMAZON_API_KEY');
    $item = $amazon->itemLookup('B0000A432X');
    ?>

Метод `itemLookup()` также принимает второй необязательный параметр для управления опциями поиска. За более подробной информацией, включающей список доступных опций, см. соответствующую документацию Amazon.

| Замечание
Для того, чтобы получать информацию о изображениях для результатов поиска, необходимо установить опцию `ResponseGroup` равной `Medium` или `Large`.

### 16.3.4. Поиск товара Amazon

Поиск товара, основанный на различных возможных критериях, упрощается при использовании метода `itemSearch()`, как это показано в следующем примере:

Пример 16.6. Поиск товара Amazon

    <?php
    require_once 'Zend/Service/Amazon.php';
    $amazon = new Zend_Service_Amazon('AMAZON_API_KEY');
    $response = $amazon->itemSearch(array('SearchIndex' => 'Books', 'Keywords' => 'php'));
    foreach($response as $r) {
        echo $r->Title .'<br />';
    }
    ?>

Метод `itemSearch()` принимает массива для управлениями опциями поиска в качестве единственного параметра. За более подробной информацией, включающей список доступных опций, см. соответствующую документацию Amazon.

| Подсказка
Класс `Zend_Service_Amazon_Query` "оберткой" для этого метода, более удобной в использовании.

### 16.3.5. Использование альтернативного API запросов

#### 16.3.5.1. Введение

`Zend_Service_Amazon_Query` предоставляет альтернативный API для использования веб-сервиса Amazon. Альтернативный API использует паттерн проектирования Fluent Interface. Это означает, что все вызовы могут производиться по "цепочке" (т.е. `$obj->method()->method2($arg)`).

API `Zend_Service_Amazon_Query` использует перегрузку для легкой настройки поиска и дает возможность поиска по определенным критериям. Каждая из опций доступна через вызов метода и каждый аргумент метода соответствует значению опции:

Пример 16.7. Поиск через Amazon с использованием альтернативного API запросов

В данном примере используется альтернативный API запросов для указания опций и их значений:

    <?php
    require_once 'Zend/Service/Amazon/Query.php';
    $query = new Zend_Service_Amazon_Query('MY_API_KEY');
    $query->Category('Books')->Keywords('PHP');
    $results = $query->search();
    foreach ($results as $result) {
        echo $result->Title .'<br />';
    }
    ?>

Этот код устанавливает опции `Category` в "Books" и `Keywords` в "PHP".

За более подробной информацией про доступные опции обратитесь к соответствующей документации Amazon.

### 16.3.6. Классы Zend_Service_Amazon

Все следующие классы возвращаются методами `Zend_Service_Amazon::itemLookup()` и `Zend_Service_Amazon::itemSearch()`:

- `Zend_Service_Amazon_Item`

- `Zend_Service_Amazon_Image`

- `Zend_Service_Amazon_ResultSet`

- `Zend_Service_Amazon_OfferSet`

- `Zend_Service_Amazon_Offer`

- `Zend_Service_Amazon_SimilarProduct`

- `Zend_Service_Amazon_Accessories`

- `Zend_Service_Amazon_CustomerReview`

- `Zend_Service_Amazon_EditorialReview`

- `Zend_Service_Amazon_ListMania`

#### 16.3.6.1. Zend_Service_Amazon_Item

`Zend_Service_Amazon_Item` является классом, используемым для представления товарных позиций, возвращенных веб-сервисом Amazon.

##### 16.3.6.1.1. Zend_Service_Amazon_Item::asXML()

`string asXML();`

Возвращает исходный XML-код для товарной позиции

##### 16.3.6.1.2. Свойства класса

`Zend_Service_Amazon_Item` имеет несколько свойств, напрямую связанных с их аналогами в стандартном API.

Таблица 16.1. Свойства класса Zend_Service_Amazon_Item

Имя | Тип | Описание
--- | --- | ---
ASIN | string | ID товарной позиции Amazon
DetailPageURL | string | URL к странице с информацией о товаре
SalesRank | string | Рейтинг продаж
SmallImage | Zend_Service_Amazon_Image | Малое изображение товара
MediumImage | Zend_Service_Amazon_Image | Среднее изображение товара
LargeImage | Zend_Service_Amazon_Image | Большое изображение товара
Subjects | array | Рубрики, к которым относится товар
Offers | `Zend_Service_Amazon_OfferSet` | Общее предложение и предложения к данному товару
CustomerReviews | array | Отзывы покупателей в виде массива объектов `Zend_Service_Amazon_CustomerReview`
EditorialReviews | array | Рецензии в виде массива объектов `Zend_Service_Amazon_EditorialReview`
SimilarProducts | array | Похожие продукты в виде массива объектов `Zend_Service_Amazon_SimilarProduct`
Accessories | array | Аксессуары к товару в виде массива объектов `Zend_Service_Amazon_Accessories`
Tracks | array | Массив номеров и названий дорожек для музыкальных CD-, DVD-дисков
ListmaniaLists | array | Связанные с данным товаром списки Listmania в виде массива объектов `Zend_Service_Amazon_ListmainList`
PromotionalTag | string | Промоушн-тег

Назад к списку классов

#### 16.3.6.2. Zend_Service_Amazon_Image

Класс `Zend_Service_Amazon_Image` представляет удаленное изображение для продукта.

##### 16.3.6.2.1. Свойства класса

Таблица 16.2. Свойства класса Zend_Service_Amazon_Image

Имя | Тип | Описание
--- | --- | ---
Url | Zend_Uri | URL для изображения
Height | int | Высота изображения в пикселах
Width | int | Ширина изображения в пикселах

Назад к списку классов

#### 16.3.6.3. Zend_Service_Amazon_ResultSet

Объекты `Zend_Service_Amazon_ResultSet` возвращаются методом Zend_Service_Amazon::itemSearch() и позволяют легко работать с результатами, возвращенными веб-сервисом.

| Замечание
Класс реализует интерфейс `SeekableIterator` для легкой итерации (например, с использованием `foreach`) и прямого доступа с использованием `seek()`.

##### 16.3.6.3.1. Zend_Service_Amazon_ResultSet::totalResults()

`int totalResults();`

Возвращает общее количество результатов поиска

Назад к списку классов

#### 16.3.6.4. Zend_Service_Amazon_OfferSet

Каждый результат, возвращаемый методами Zend_Service_Amazon::itemSearch() и Zend_Service_Amazon::itemLookup(), содержит объекты `Zend_Service_Amazon_OfferSet`, через которые может быть получена информация о ценах к товару.

##### 16.3.6.4.1. Свойства класса

Таблица 16.3. Свойства класса Zend_Service_Amazon_OfferSet

Имя | Тип | Описание
--- | --- | ---
LowestNewPrice | int | Наиболее низкая цена к новому товару
LowestNewPriceCurrency | string | Валюта, в которой приведена цена `LowestNewPrice`
LowestOldPrice | int | Наиболее низкая цена к товару, бывшему в употреблении
LowestOldPriceCurrency | string | Валюта, в которой приведена цена `LowestOldPrice`
TotalNew | int | Общее количество нового товара, доступного для данной позиции
TotalUsed | int | Общее количество товара, бывшего в употреблении, доступного для данной позиции
TotalCollectible | int | Общее количество коллекционного товара, доступного для данной позиции
TotalRefurbished | int | Общее количество подновленного товара, доступного для данной позиции
Offers | array | Массив объектов `Zend_Service_Amazon_Offer`

Назад к списку классов

#### 16.3.6.5. Zend_Service_Amazon_Offer

Все предложения к товарной позиции возвращаются как объекты `Zend_Service_Amazon_Offer`.

Таблица 16.4. Свойства класса Zend_Service_Amazon_Offer

Имя | Тип | Описание
--- | --- | ---
MerchantId | string | ID продавца Amazon
GlancePage | string | URL страницы с информацией о продавце
Condition | string | Состояние товара
OfferListingId | string | ID листинга предложений
Price | int | Цена товара
CurrencyCode | string | Код валюты
Availability | string | Наличие товара
IsEligibleForSuperSaverShipping | boolean | Является ли товар подходящим для Super Saver Shipping (экономная доставка)

Назад к списку классов

#### 16.3.6.6. Zend_Service_Amazon_SimilarProduct

Когда производится поиск товара, Amazon также возвращает список похожих продуктов, которые могут соответствовать требованиям покупателя. Все они возвращаются в виде объектов `Zend_Service_Amazon_SimilarProduct`.

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

##### 16.3.6.6.1. Свойства класса

Таблица 16.5. Свойства класса Zend_Service_Amazon_SimilarProduct

Имя | Тип | Описание
--- | --- | ---
ASIN | string | Уникальный ID товара Amazon (ASIN)
Title | string | Название товара

Назад к списку классов

#### 16.3.6.7. Zend_Service_Amazon_Accessories

Аксессуары для возвращенных товарных позиций представляются в виде объектов `Zend_Service_Amazon_Accessories`.

##### 16.3.6.7.1. Свойства класса

Таблица 16.6. Свойства класса Zend_Service_Amazon_Accessories

Имя | Тип | Описание
--- | --- | ---
ASIN | string | Уникальный ID товара Amazon (ASIN)
Title | string | Название товара

Назад к списку классов

#### 16.3.6.8. Zend_Service_Amazon_CustomerReview

Каждый покупательский отзыв возвращается в виде объекта `Zend_Service_Amazon_CustomerReview`

##### 16.3.6.8.1. Свойства класса

Таблица 16.7. Свойства класса Zend_Service_Amazon_CustomerReview

Имя | Тип | Описание
--- | --- | ---
Rating | string | Рейтинг товара
HelpfulVotes | string | Голоса за то, что отзыв является полезным
CustomerId | string | ID покупателя
TotalVotes | string | Всего голосов
Date | string | Дата размещения отзыва
Summary | string | Краткий отзыв
Content | string | Полный текст отзыва

Назад к списку классов

#### 16.3.6.9. Zend_Service_Amazon_EditorialReview

Каждая рецензии к товару возвращается как объект `Zend_Service_Amazon_EditorialReview`.

##### 16.3.6.9.1. Свойства класса

Таблица 16.8. Свойства класса Zend_Service_Amazon_EditorialReview

Имя | Тип | Описание
--- | --- | ---
Source | string | Источник рецензии
Content | string | Текст рецензии

Назад к списку классов

#### 16.3.6.10. Zend_Service_Amazon_Listmania

Каждый список ListMania возвращается как объект `Zend_Service_Amazon_Listmania`.

##### 16.3.6.10.1. Свойства класса

Таблица 16.9. Свойства класса Zend_Service_Amazon_Listmania

Имя | Тип | Описание
--- | --- | ---
ListId | string | ID списка
ListName | string | Имя списка

Назад к списку классов

Пред. | Уровень выше | След.
16.2. Zend_Service_Rest | Начало | 16.4. Zend_Service_Flickr