Парсер предназначен для работы с XML-каталогами товаров интернет-магазина OZON.ru.
Скрипты парсера написаны на PHP и XSLT и существенно упрощают представление товаров с OZON.ru на вашем сайте. Для установки скачайте и распакуйте дистрибутив парсера:
Системные требования:
PHP версии 5 или выше, с установленными пакетами
CURL,
DOM,
XSL и
iconv (требуется, только если кодировка вашего сайта
отлична от UTF-8). Как правило, данные пакеты включены по умолчанию на большинстве веб-серверов.
Также необходимо, чтобы ваш сайт имел доступ к внешним ресурсам в интернете для скачивания данных с сервера OZON.ru.
Чтобы проверить, соответствует ли ваша система всем требованиям, запустите скрипт
bin/check.php, который выполнит все необходимые проверки. Если вы устанавливаете дистрибутив парсера
с помощью инсталлятора, все необходимые проверки будут выполнены автоматически.
Парсер может быть установлен двумя способами:
Мы рекомендуем использовать этот способ установки, поскольку он снижает вероятность ошибок при размещении файлов парсера на вашем сайте.
Для выполнения этого типа установки вам необходимо скачать и распаковать архив со скриптом-инсталлятором
. После распаковки вы увидите следующие файлы
(предполагается, что архив был распакован на диск C:\)
C:\┐
└ ozonru-parser-1.23\┐
├ ozonru-parser-1.23.php
└ readme.html
Файл ozonru-parser-1.23.php - и есть скрипт-инсталлятор.
Используя ваш FTP-клиент (или другой способ) создайте на вашем сайте папку ozonru-parser/.
Путь, по которому вы создадите эту папку, зависит от настроек вашего веб-сервера,
однако нужно выбрать место так, чтобы скрипты (страницы) вашего сайта имели доступ к этой папке и
файлам внутри. Лучше всего, если вы назначите ей права 0777 (или -rwxrwxrwx), чтобы она была
доступна для создания новых файлов и папок как через FTP, так и самим парсером.
Скопируйте содержимое папки С:\ozonru-parser-1.23\ к себе на сайт в папку, которую
вы создали: ozonru-parser/.
Например, путь на сервере, где лежат файлы вашего сайта, может быть следующим:
/home/mysite.ru/. Тогда, после копирования вы увидите следующую структуру файлов:
/┐
└ home/┐
└ mysite.ru/┐
├ другие файлы и папки вашего сайта
...
└ ozonru-parser/┐
├ ozonru-parser-1.23.php
└ readme.html
Для завершения установки осталось только запустить скрипт-инсталлятор. Для запуска обратитесь к нему
с помощью вашего браузера, набрав в адресной строке следующий адрес:
http://mysite.ru/ozonru-parser/ozonru-parser-1.23.php (предполагается, что имя вашего сайта -
mysite.ru).
После запуска скрипт выполнит все необходимые проверки системы, наличие необходимых библиотек для работы парсера, а также доступность XML-каталогов OZON.ru для скачивания. Если в вашей системе не хватает каких-либо библиотек или условий для работы парсера, инсталлятор сообщит об этом. После того, как проблема будет исправлена, повторно запустите инсталлятор.
Если все проверки прошли успешно, файлы парсера будут размещены по указанному адресу, и парсер будет готов к работе.
В случае, если установка с помощью скрипта-инсталлятора по каким-то причинам вас не устраивает, можно установить парсер из ZIP-архива.
Скачайте ZIP-архив парсера ozonru-parser-1.23.zip и распакуйте его у себя на
компьютере, например, в папку C:\ozonru-parser-1.23\.
Если все сделано правильно, в выбранной папке вы увидите следующие файлы и папки:
C:\┐
└ ozonru-parser-1.23\┐
├ bin\
├ src\...
├ test\...
├ web\...
└ readme.html
Используя ваш FTP-клиент (или другой способ) создайте на вашем сайте папку ozonru-parser/
для файлов парсера. Путь, по которому вы создадите эту папку, зависит от настроек вашего веб-сервера,
однако нужно выбрать место так, чтобы скрипты (страницы) вашего сайта имели доступ к этой папке и
файлам внутри. Лучше всего, если вы назначите ей права 0777 (или -rwxrwxrwx), чтобы она была
доступна для создания новых файлов и папок как через FTP, так и самим парсером.
Обратите внимание, что на веб-сервере имя папки указано без номера версии ("1.23"). Это сделано специально, чтобы потом, при выходе новой версии парсера, можно было легко обновить его файлы.
Скопируйте содержимое папки С:\ozonru-parser-1.23\ к себе на сайт в папку, которую
вы создали: ozonru-parser/.
Например, путь на сервере, где лежат файлы вашего сайта, может быть следующим:
/home/mysite.ru/. Тогда, после копирования вы увидите следующую структуру файлов:
/┐
└ home/┐
└ mysite.ru/┐
├ другие файлы и папки вашего сайта
...
└ ozonru-parser/┐
├ bin/
├ src/...
├ test/...
├ web/...
└ readme.html
Обратите внимание, что папка ozonru-parser/ должна быть доступна для записи, потому что
парсер при работе будет создавать временные файлы. Также проверьте, что файлы парсера доступны для чтения,
чтобы ваши собственные скрипты могли получить к ним доступ.
Итак, парсер готов к дальнейшей работе.
Скрипты можно использовать как в составе веб-сайта (для генерации страниц), так и для самостоятельно работы с XML-каталогами OZON.ru. Далее приведены примеры основных способов использования скриптов парсера. Некоторые из них просты и требуют лишь базовых знаний PHP, другие — сложнее и требуют дополнительных знаний XSL и прочих веб-технологий.
Исходные тексты PHP-скриптов, XSL- и CSS-файлов, упоминаемых в примерах, можно найти в
дистрибутиве парсера в папках web/example(1-7).
Выполнив все шаги данного руководства, вы получите список товаров из конечной ветки XML-каталога OZON.ru на одной из страниц вашего сайта.
Выберите подходящий для вас способ установки парсера и, следуя шагам из описания, установите парсер на ваш сайт (подробнее об установке можно прочитать в разделе «Установка»).
Теперь, чтобы получить итоговый результат — каталог товаров на одной из страниц вашего сайта, осталось подключить парсер к сайту.
Предположим, что вы хотите представить список книг о CRM.
Откройте на редактирование страницу вашего сайта, на которой вы хотите представить список товаров.
Предположим, что это страница с именем index.php, которая находится в папке
/home/mysite.ru/books.php на вашем сайте.
Подключите файл стилей web/ozon.css к заголовку страницы:
<html> <head> <title>Книги о CRM | Название вашего сайта</title> <link rel="stylesheet" type="text/css" href="/ozonru-parser/web/ozon.css" /> ... </head> <body> ...
Добавьте следующий PHP-код в то место вашей страницы, где вы хотите представить список товаров из выбранной ветки XML-каталога Озон.ру:
<body>
...
<?php
require_once 'ozonru-parser/src/OzonCatalog.php';
// каталог третьего уровня "Маркетинг и реклама",
// к которому относятся книги о CRM
$catalog = new OzonCatalog('business_catalog/12292');
$catalog->transform('ozonru-parser/src/xsl/offers.xsl',
array('PARTNER' => '<YOUR-PARTNER-ID>', // ваш партнерский идентификатор
'categoryId' => 1099944 // ID категории книг о CRM
));
?>
...
</body>
</html>
Обратите внимание, мы использовали относительный путь к файлу парсера —
ozonru-parser/src/OzonCatalog.php. Если ваш файл, в который вы добавляете код
парсера, находится по другому пути, вам нужно соответствующе изменить и путь к OzonCatalog.php.
Если все было сделано верно, на выбранной вами странице сайта появится список книг о CRM. Результат будет примерно следующим:
Если списка книг не появилось, проверьте, правильно ли вы указали путь к файлам парсера в PHP-коде.
По умолчанию каталог товаров выдается в кодировке UTF-8. Если ваш сайт использует другую кодировку (например, windows-1251), для корректного представления информации о товарах необходимо передать дополнительный параметр:
<?php require_once 'ozonru-parser/src/OzonCatalog.php'; // каталог третьего уровня "Маркетинг и реклама" // к которому относятся книги о CRM $catalog = new OzonCatalog('business_catalog/12292'); $catalog->transform('ozonru-parser/src/xsl/offers.xsl', array( 'PARTNER' => '<YOUR-PARTNER-ID>', // ваш партнерский идентификатор 'categoryId' => 1099944, // ID категории книг о CRM 'encoding' => 'windows-1251' // кодировка вашего сайта )); ?>
Количество товаров в категории может быть довольно большим, и поэтому для вывода информации о товарах используется постраничный вывод. По умолчанию, парсер выводит товары по 20 штук на странице, начиная с первой страницы.
Добавим обработчик номера страницы, а также изменим количество товаров — 15 штук на странице.
Номер страницы передается с помощью GET-параметра page,
который нам надо считать и передать в парсер при выводе списка товаров:
<html>
<head>
<title>Книги о CRM | Название вашего сайта</title>
<link rel="stylesheet" type="text/css" href="../ozon.css" />
</head>
<body>
<?php
require_once dirname(__FILE__).'/../config.php';
$page = 1;
if (array_key_exists('page', $_GET))
$page = trim($_GET['page']);
// каталог третьего уровня "Маркетинг и реклама",
// к которому относятся книги о CRM
$catalog = new OzonCatalog('business_catalog/12292');
$catalog->transform(dirname(__FILE__).'/../../src/xsl/offers.xsl',
array('PARTNER' => '[YOUR-PARTNER-ID]', // ваш партнерский идентификатор
'categoryId' => 1099944, // ID категории книг о CRM
'encoding'=>'windows-1251', // кодировка
'PAGENUM'=>$page, // номер страницы
'PAGESIZE'=>15 // количество товаров на странице
));
?>
</body>
</html>
Далее можно перейти к настройке вида списка товаров.
Внешний вид списка товаров зависит от двух вещей:
Начнем с простого — с CSS.
С помощью CSS можно влиять на тип и размер шрифта, величину отступов, цвет текста и фона,
выравнивание текста и прочие параметры. Чтобы изменения затрагивали только список товаров (а не весь
контент вашего сайта), следует дописать новые или изменить существующие (в случае, если вы
используете стили из файла web/ozon.css) стили тэгов, отмеченные
классом ozonru-parser — это класс контейнера, в котором содержаться все элементы
списка товаров.
Откройте в редакторе файл web/ozon.css (если вы распаковали архив с дистрибутивом
парсера так, как это было написано в примере 1, файл стилей
расположен в C:\ozonru-parser-1.23\web\ozon.css) и добавьте в него следующие стили.
Поменяем шрифт названия товара — сделаем его больше и другого цвета:
.ozonru-parser h2 { font-size: 150%; margin: 0 0 1ex 0; } .ozonru-parser h2 a { color: #F90; text-decoration: none; border-bottom: 1px dashed #F90; } .ozonru-parser h2 a:visited { color: #09F; border-bottom-color: #09F; }
Также изменим стиль имени автора — уберем курсив и увеличим размер букв:
.ozonru-parser .offer .author { font-size: 115%; font-family: sans-serif;
font-style: normal; }
Переместим изображение товара в правую сторону и уменьшим его:
.ozonru-parser .offer .cart { float: right; margin: 0 0 0 0.75em; }
.ozonru-parser .offer .cart img { width: 88px; }
Добавим кнопку "Купить" из логотипов, представленных на сайте OZON.ru; уберем подчеркивание у ссылки с ценой товара:
.ozonru-parser .offer .cart .price { border: none; width: 88px;
background: url('http://www.ozon.ru/graphics/img_ass/buttons/button88x31.gif')
no-repeat left top;
display: block; padding: 33px 0 0 0; font-size: 100%; }
.ozonru-parser .offer .cart .price .words { display: none; }
.ozonru-parser .offer .cart a { text-decoration: none; }
А также полностью уберем вспомогательную информацию об издательстве, ISBN и т.п.:
.ozonru-parser .offer .info { display: none; }
.ozonru-parser .offer ul.tags { display: none; }
Скопируйте файл C:\ozonru-parser-1.23\web\ozon.css с вашего компьютера на ваш сайт
в папку /home/mysite.ru/ozonru-parser/web/. Подробнее о
копировании файлов парсера на сайт написано в разделе об установке парсера.
Посмотрим, что получилось:
Если у вас получился другой результат, проверьте, все ли изменения вы внесли в web/ozon.css,
а также в правильное ли место на вашем сайте он скопирован.
Если изменения, которые вы хотите внести во внешний вид списка товаров значительны и не могут быть сделаны средствами CSS, необходимо изменить саму структуру HTML-тэгов. Это делается за счет изменения XSL-файлов, используемых для отображения товаров.
Например, представим список товаров в табличном виде, отсортированном по названию товара
в алфавитном порядке. Для этого создадим новый файл web/offertable.xsl:
<?xml version="1.0" encoding="windows-1251"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes=""> <xsl:param name="categoryId"/> <xsl:variable name="title" select="//category[@id = $categoryId]"/> <xsl:include href="../src/xsl/offers.xsl"/> <xsl:template match="/"> <xsl:apply-templates select="//offers"/> </xsl:template> <xsl:template match="offers"> <table border="1" cellspacing="0" cellpadding="2"> <thead> <tr> <th>Название</th> <th>?здательство</th> <th>Цена</th> </tr> </thead> <tbody> <xsl:for-each select="offer[categoryId/text() = $categoryId]"> <xsl:sort select="name"/> <tr> <td><a> <xsl:attribute name="href"> <xsl:apply-templates select="url"/> </xsl:attribute> <xsl:value-of select="name"/> </a></td> <td><xsl:value-of select="publisher"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:for-each> </tbody> </table> </xsl:template> </xsl:stylesheet>
Теперь надо скопировать файл web/offertable.xsl на ваш сайт в папку
/home/mysite.ru/ozonru-parser/web/ (путь к папке может отличаться, если вы
изначально разместили файлы парсера в другом месте).
На странице вашего сайта, к которой уже подключен парсер, внесем следующие изменения:
<?php require_once 'ozonru-parser/src/OzonCatalog.php'; // каталог третьего уровня "Маркетинг и реклама" // к которому относятся книги о CRM $catalog = new OzonCatalog('business_catalog/12292'); $catalog->transform('ozonru-parser/web/offertable.xsl', array( 'PARTNER' => '<YOUR-PARTNER-ID>', // ваш партнерский идентификатор 'categoryId' => 1099944, // ID категории книг о CRM 'encoding' => 'windows-1251' // кодировка вашего сайта )); ?>
Откроем страницу в браузере и посмотрим, что у нас получилось:
Рассмотрим показ подробной информации о товаре на примере фильмов.
Подробная информация о фильме должна включать:
В случае, если в XML-каталоге представлена информация о названии фильма на языке оригинала, вывести ссылку на страницу поиска информации о данном фильме на IMDb по названию и году выпуска.
Если в каталоге имеются еще какие-либо фильмы данного режиссера, вывести список названий этих фильмов. Также, вывести список фильмов, снятых в том же году в той же стране.
Нам потребуется создать новый XSL-файл (подробнее о создании
XSL-файлов рассказано в примере 2), который будет отображать всю доступную информацию о фильмах,
представленную в XML-каталоге. Сохраним его в папку web/movie.xsl.
<?xml version="1.0" encoding="windows-1251"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml" extension-element-prefixes="php" exclude-result-prefixes=""> <xsl:param name="offerId"/> <xsl:include href="../src/xsl/core.xsl"/> <xsl:template match="offer/title" mode="withprice"> <a href="movie.php?offerId={parent::offer/@id}"> <xsl:apply-templates select="."/> <xsl:text>, </xsl:text> <xsl:value-of select="parent::offer/price"/> <xsl:text> руб.</xsl:text> </a> </xsl:template> <xsl:template match="offer"> <div class="offer"> <div class="picture"> <xsl:apply-templates select="picture"/> </div> <h1> <xsl:apply-templates select="title"/> <xsl:if test="year"> <xsl:text> (</xsl:text> <xsl:value-of select="year"/> <xsl:text> г.</xsl:text> <xsl:if test="country"> <xsl:text>, </xsl:text> <xsl:value-of select="country"/> </xsl:if> <xsl:text>)</xsl:text> </xsl:if> </h1> <xsl:if test="originalName"> <p><xsl:apply-templates select="originalName"/></p> </xsl:if> <div class="description"> <p><xsl:apply-templates select="description"/></p> <p>В ролях: <xsl:value-of select="starring"/></p> </div> <xsl:if test="director"> <p> <xsl:text>Режиссер: </xsl:text> <strong><xsl:value-of select="director"/></strong> <xsl:text>.</xsl:text> </p> </xsl:if> <p class="buy"> <a> <xsl:attribute name="href"> <xsl:apply-templates select="url" mode="cart"/> </xsl:attribute> <xsl:text> Купить фильм за </xsl:text> <xsl:value-of select="price"/> <xsl:text> руб. на OZON.ru</xsl:text> </a> <xsl:text> (</xsl:text> <xsl:value-of select="orderingTime/ordering"/> <xsl:text>)</xsl:text> </p> <xsl:if test="originalName"> <p class="imdb"> <a> <xsl:attribute name="href"> <xsl:text>http://www.imdb.com/search/title?</xsl:text> <xsl:if test="year"> <xsl:text>release_date=</xsl:text> <xsl:value-of select="year"/> <xsl:text>-01%2C</xsl:text> <xsl:value-of select="year"/> <xsl:text>-12&</xsl:text> </xsl:if> <xsl:text>title=</xsl:text> <xsl:value-of select="php:function('urlencode', string(originalName))"/> </xsl:attribute> <xsl:text> Найти дополнительную информацию о фильме на IMDb.com </xsl:text> </a> </p> </xsl:if> <xsl:variable name="director" select="director/text()"/> <xsl:variable name="directorMovies" select="//offer[not(@id = $offerId) and child::director/text() = $director]"/> <xsl:if test="count($directorMovies) > 0"> <p>Другие фильмы <xsl:value-of select="$director"/>: </p> <ul> <xsl:for-each select="$directorMovies"> <xsl:sort select="title"/> <xsl:sort select="price" data-type="number"/> <li> <xsl:apply-templates select="title" mode="withprice"/> </li> </xsl:for-each> </ul> </xsl:if> <xsl:variable name="country" select="country/text()"/> <xsl:variable name="year" select="year/text()"/> <xsl:variable name="countryYearMovies" select="//offer[not(@id = $offerId) and child::country/text() = $country and child::year/text() = $year]"/> <xsl:if test="count($countryYearMovies) > 0"> <p> <xsl:text>Другие фильмы, снятые в </xsl:text> <xsl:value-of select="$year"/> <xsl:text> г. в </xsl:text> <xsl:value-of select="$country"/><xsl:text>: </xsl:text> </p> <ul> <xsl:for-each select="$countryYearMovies"> <xsl:sort select="title"/> <xsl:sort select="price" data-type="number"/> <li> <xsl:apply-templates select="title" mode="withprice"/> </li> </xsl:for-each> </ul> </xsl:if> </div> </xsl:template> <xsl:template match="/"> <xsl:apply-templates select="//offer[@id = $offerId]"/> </xsl:template> </xsl:stylesheet>
Теперь создадим файл со стилями и сохраним его в web/movie.css.
.picture { float: left; margin: 0 1em 1ex 0; }
.buy { background:
url('https://www.ozon.ru/graphics/img_ass/buttons/button88x31_white.gif')
no-repeat left center; padding-left: 100px; line-height: 200%; }
.imdb { background:
url('http://g-ecx.images-amazon.com/images/G/01/digital/video/dp/logo-imdb._V7586292_.gif')
no-repeat 18px center; padding-left: 100px; line-height: 200%; }
Добавим в тело страницы, которая должна показывать подробную информацию о фильме, следующий PHP-код:
<?php require_once dirname(__FILE__).'/../src/xsl/OzonCatalog.php'; ini_set("max_execution_time", "0"); // каталог третьего уровня "Зарубежное кино/Актеры и актрисы" $path = 'movie_catalog/1095888'; $catalog = new OzonCatalog($path); // Фильм "Бойцовский клуб" $offerId = '3446678'; $catalog->transform('movie.xsl', array( 'PARTNER' => $PARTNER_ID, // ваш партнерский идентификатор 'offerId' => $offerId, 'encoding' => 'windows-1251' )); ?>
В заголовок страницы добавим ссылку на CSS-файл web/movie.css, который мы создали
(подробнее о добавлении CSS-файла к вашему сайту написано в примере 2).
В результате на странице должна появиться расширенная информация о фильме, который мы выбрали для отображения:
В качестве примера представлена тестовая страница сайта с каталогом GPS-навигаторов,
продающихся на OZON.ru. (Файл дистрибутива web/gps.php)
require_once dirname(__FILE__).'/config.php';
require_once dirname(__FILE__).'/../src/Ozon.php';
ini_set("max_execution_time", "0");
// ветка каталога Озон с GPS-навигаторами
$path = 'gps';
$catalog = new OzonCatalog($path);
// вычисление текущей страницы каталога
$page = array_key_exists('page', $_GET) ? trim($_GET['page']) : 1;
if (! preg_match('/[0-9]+/', $page) || $page < 1)
$page = 1;
// выполнение преобразования XML-каталога в HTML-страницу
$catalog->transform('offers.xsl', array(
'PAGENUM'=>$page, // номер текущей страницы
'PAGESIZE'=>10, // количество товаров на странице
'PARTNER'=>$PARTNER_ID // партнерский идентификатор
));
В составе парсера есть следующие классы:
Ozon (файл src/Ozon.php) — класс предназначен для получения
списка каталогов OZON.ru.OzonCatalog (src/OzonCatalog.php) — класс, представляющий
набор методов для работы
с конкретной веткой XML-каталога OZON.ru: получение информации о дате последнего обновления, получения
содержимого XML-каталога, а также для выполнения XSL-преобразования.OzonException — исключение,
выбрасываемое в случае каких либо проблем в работе классов парсера.Кроме них есть несколько вспомогательных классов:
Cache (src/Cache.php) — класс для кэширования. Может кэшировать
что угодно. В скриптах используется для кэширования содержимого XML-каталогов, результатов
XSL-преобразований и вспомогательной информации.CacheRecord (src/Cache.php) —
вспомогательный класс, использующийся при кэшировании.XSLTransformer (src/XSLTransformer.php) — класс для выполнения XSL-преобразования
веток XML-каталогов OZON.ru.Рассмотрим использование этих классов подробнее.
Класс Ozon предназначен для получения списка каталогов OZON.ru и
содержит единственный статический метод:
getCatalogList($level = 1) — возвращает массив объектов
OzonCatalog, соответствующих
XML-каталогам 1-го, 2-го или 3-го уровня. Необязательный параметр $level указывает на
уровень каталогов, который метод должен вернуть.
Данный метод выполняет HTTP-запрос к сайту OZON.ru (а в случае получения списка 2-го и 3-го уровня —
множественные запросы), и его работа может занять длительное время, особенно при медленном соединении.
Поэтому он кэширует результаты работы с помощью метода
Cache::startCaching().
Пример использования: получение списка каталогов третьего уровня (см.
web/example5/ozon_example.php).
<?php require_once dirname(__FILE__).'/../../src/Ozon.php'; // Получение XML-каталогов OZON.ru третьего уровня // в виде массива объектов OzonCatalog $level3List = Ozon::getCatalogList(3); print_r($level3List); ?>
Данный класс представляет ветку XML-каталога OZON.ru первого, второго или третьего уровня. Ветке каталога соответствует XML-файл (или XML-файл в ZIP-архиве), содержащий описание товаров из данного каталога. Класс содержит следующие методы:
__construct($url, $validate = true) —
создает объект из ссылки на каталог в OZON.ru. Понимает $url вида: $validate = false).getXmlUrl() — возвращает URL файла каталога в XML.
В случае, если объект был создан без валидации ($validate = false), метод вернет
значение, переданное при создании в параметре $url.getZipUrl() — возвращает URL файла каталога в ZIP.
Не все каталоги имеют ZIP-версию, поэтому в случае, если ZIP-версия не представлена, метод
выбросит исключение OzonException.getInfo() — возвращает объект
OzonCatalogInfo с информацией о
каталоге. Результат работы этого метода кэшируется с использованием метода
Cache::startMicroCaching().getRawUrl() — возвращает значение $url
в том виде, в котором оно было передано в конструктор при создании объекта.load($returnContent = true) —
возвращает содержимое XML-каталога. При необходимости скачивает обновленную версию в случае,
если версия в кэше устарела. В случае, если требуется только обновить версию XML-каталога,
можно установить параметр $returnContent в false.transform($xsl, $params = NULL, $returnFileName = false) — выполняет
XSL-преобразование содержимого XML-каталога с помощью XSL-скрипта, имя которого передано
в качестве параметра $xsl. Результат работы выводится в STDOUT. Второй параметр
$params позволяет передать хэш параметров в XSL-скрипт для использования в
XSL-преобразовании (см. XSLTransformer).
Третий параметр позволяет получить имя файла, в который был закэширован результат XSL-преобразования
(см. XSLTransformer::transform()).Пример использования: создание объекта OzonCatalog для XML-каталога GPS-навигаторов
(web/example5/ozon_catalog_example.php).
<?php require_once dirname(__FILE__).'/../../src/OzonCatalog.php'; // Ветка каталога OZON.ru с GPS-навигаторами $catalog = new OzonCatalog('gps'); echo $catalog->getXmlUrl(); // напечатает 'http://www.ozon.ru/multimedia/yml/partner/gps.xml' echo $catalog->getZipUrl(); // напечатает 'http://www.ozon.ru/multimedia/yml/partner/gps.zip' echo $catalog->getRawUrl(); // напечатает 'gps' echo $catalog->load(); // напечатает содержимое XML-каталога echo $catalog->transform(dirname(__FILE__).'/../catalog.xsl'); // напечатает результат работы XSL-скрипта web/catalog.xsl ?>
Класс содержит информацию о времени последнего изменения XML-каталога, а также размер соответствующего XML и ZIP файлов. Класс содержит следующие поля и методы:
$updateDate — дата последнего изменения XML-каталога (в формате
time()).$xmlLength — размер XML-файла каталога в байтах.$zipLength — размер ZIP-архива каталога в байтах.__construct($updateDate, $xmlLength, $zipLength) — создает объект с заданными значениями
даты последнего изменения, и размеров XML и ZIP файлов.getUpdateDate() — возвращает время последнего изменения каталога (в формате
time()).getXmlLength() — возвращает размер XML-файла каталога в байтах.getZipLength() — возвращает размер ZIP-архива каталога в байтах.Класс предназначен для кэширования чего угодно. В парсере он используется для кэширования содержимого XML-каталогов, результатов XSL-преобразований, а также промежуточных результатов для ускорения работы. Класс содержит следующие поля и методы:
$useCache — поле класса, позволяющее
включать (true) и выключать (false) любое кэширование.$externalMicroCaching — поле класса,
позволяющее включать (true) и выключать (false) кэширование
внешних ресурсов (например, XML-документов, скаченных с OZON.ru) без проверки их обновления в
течением периода времени, заданного полем
$microCachingPeriod.$microCachingPeriod — поле класса,
задающее период времени, в течение которого закэшированный внешний ресурс считается валидным
(см. $externalMicroCaching).$cachePath — поле класса, определяющее, где хранятся
файлы кэша. Если значение поля не задано, оно будет установлено автоматически.getCachePath() — возвращает путь, по которому
хранятся файлы кэша. Если поле $cachePath не установлено, метод проинициализирует его
следующим образом: /путь к файлам парсера/cache/, если скрипты имеют право записи в данном
каталоге;/текущая рабочая директория/cache/, если скрипты имеют право записи в
данном каталоге;/системная временная папка/cache/, в противном случае.getProjectUpdateDate() — возвращает
дату последнего изменения файлов парсера.startCaching($path, $externalUpdateDate = 0) —
включает кэширование всего последующего вывода в STDOUT. Использование метода следующее:
<?php require_once dirname(__FILE__).'/../../src/Cache.php'; $cache = Cache::startCaching('anypath'); if ($cache->isExpired()) { // любой вывод будет закэширован // ... } $cache->finish(); // В случае, если нам не нужно выводить закэшированное содержимое на экран: $cache = Cache::startCaching('anypath'); if ($cache->isExpired()) { // любой вывод будет закэширован // ... } $cache->finish(false); $data = $cache->getContent(); ?>
Метод принимает два параметра:
$path — путь кэшируемого объекта (произвольная строковая строка, уникальным образом
идентифицирующая, что мы кэшируем).$externalUpdateDate — timestamp для определения, устарела ли запись в кэше или
нет. С его помощью можно обновить запись в кэше в соответствии с датой изменения какого-либо внешнего
объекта или ресурса.Метод возвращает объект CacheRecord.
startMicroCaching($path) —
включает микро-кэширование. Работает идентично
startCaching(), но использует микро-кэширование
(см. $externalMicroCaching).clear() — очищает кэш, удаляя все закэшированные данные.Класс представляет закэшированный контент и имеет следующие методы:
__construct ($path, $externalUpdateDate = 0) — создает
запись в кэше с указанным путем $path. Параметр $externalUpdateDate используется
для сравнения даты изменения файла записи в кэше (см.
Cache::startCaching()).isExpired() — возвращает true,
если запись устарела, и false в противном случае.finish($doOutput = true, $saveContent = true) — завершает кэширование и выводит
содержимое кэша в STDOUT. В случае, если параметр $doOutput = false, в консоль
ничего выведено не будет. Параметр $saveContent позволяет отключать автоматическое
сохранение закэшированных данных, это может быть полезно для организации кэширования в рамках
одного запроса — без сохранения между сессиями.getContent() — возвращает содержимое кэша.
Метод может быть использован только после вызова метода finish(). Если вызвать его
до того, как был выполнен finish(), будет возвращена пустая строка.Класс предназначен для выполнения XSL-преобразования содержимого XML-каталогов OZON.ru. Как
правило не используется самостоятельно, а только через вызов метода
OzonCatalog::transform().
В классе определены следующие методы:
__construct($xsl) — создает объект
с указанием пути XSL-файла для преобразования.transform($catalog, $params = NULL, $returnFileName = false) —
выполняет XSL-преобразование указанной в параметре $catalog ветки XML-каталога,
представленной объектом OzonCatalog.
Во втором параметре $params можно передать хэш параметров для использования в
XSL-преобразовании. Так же есть возможность получить имя файла, в который был закэширован результат
XSL-преобразования, для этого нужно установить параметр $returnFileName в true.XML-каталоги OZON.ru периодически обновляются (несколько раз в день), поэтому для
отображения самой последней информации имеет смысл настроить автоматическое
обновление данных в кэше парсера. Для этой цели можно использовать скрипт bin/autoloader.php,
который умеет скачивать обновления данных.
Рассмотрим автоматическое обновление информации из XML-каталога по деловой литературе из раздела
«Предпринимательство»
(business_catalog/12266).
Есть два варианта запуска скрипта bin/autoloader.php: из командной строки или через
браузер. В первом случае мы передаем путь к XML-каталогу в качестве параметра следующим образом:
php autoloader.php business_catalog/12266
При запуске скрипта через браузер путь к каталогу передается с помощью GET-параметра path:
http://адрес-вашего-сайта.com/путь-к-парсеру/bin/autoloader.php?path=business_catalog%2F12266
Запускать скрипт с помощью браузера может быть удобным, если у вас нет доступа к командной строке на вашем веб-сервере.
Если вы все сделали правильно, появится сообщение, что каталог загружен.
Т.к. XML-каталоги обновляются несколько раз в день, имеет смысл добавить запуск скрипта в планировщик задач вашей операционной системы. Периодичность и время запуска следует выбрать исходя из загруженности сайта и мощности сервера — чем мощнее сервер и чем больше пропускная способность интернет-канала, к которой он подключен, тем чаще можно запускать скрипт. Например, на моем партнерском сайте ozon2.ru данные обновляются раз в сутки.
Рассмотрим отдельно установку планировщика в системе Windows (для удаленного вызова
bin/autoloader.php через браузер) и на Unix-сервере (для непосредственного запуска
скрипта).
Для начала надо создать ярлык, ссылающийся на скрипт на вашем сайте:
http://адрес-вашего-сайта.com/путь-к-парсеру/bin/autoloader.php?path=business_catalog%2F12266
Затем добавим задание для периодического выполнения, для чего откроем «Панель управления» Windows, выберем «Назначенные задания» и создадим новое задание:
В открывшемся окне нажмите «Далее», а затем кнопку «Обзор» и выберите в качестве приложения, для которого следует составить расписание, ярлык, который мы сделали:
Осталось только назначить периодичность запуска и подтвердить создание задания:
Таким образом, наш скрипт будет запускаться ежедневно в 6 утра.
Самый распространенный способ задать расписание запуска программы под Unix — использовать
утилиту crontab, однако на вашем веб-сервере могут использоваться другие утилиты,
поэтому лучше всего уточнить этот вопрос у хостинг-провайдера или в документации. Далее
будет рассмотрен процесс задания расписания для запуска с помощью crontab.
Утилита crontab использует текстовый файл для задания расписания.
Для начала проверим, есть ли еще какие-либо расписания в системе — выполним следующую команду:
crontab -l
Если в системе уже существуют какие-то задачи, работающие по расписанию, вы увидите нечто подобное (конкретные значения расписания — числа и звездочки слева, а также пути к скриптам будут отличаться):
10 7 * * * php /home/site.com/fast/tagclean.php 10 7 * * * php /home/site.com/fast/cacheclean.php 15 7 * * * php /home/site.com/fast/sm.php
Создайте текстовый файл, в который добавьте следующую запись:
@daily php /полный_путь_к_вашему_сайту_на_сервере/ozonru-parser/bin/autoload.php business_catalog/12266
Префикс @daily укажет на то, как часто нужно запускать скрипт. Подробнее про
параметры времени и периодичности запуска можно прочитать в руководстве к crontab
или по адресу
www.opennet.ru/man.shtml?topic=crontab&category=5&russian=0.
Если в вашей системе уже были назначенные задания, скопируйте в свой файл строчки с расписанием,
которые вывел crontab -l. Сохраните файл с именем crontab.txt.
Осталось только обновить расписание в системе с помощью команды:
crontab /полный_путь_к_файлу/crontab.txt
Для надежности можно проверить, добавился ли запуск скрипта автозагрузки в расписание. Для этого
нужно повторно выполнить команду crontab -l. Ваш скрипт
должен быть указан в списке.
Один из вариантов работы и хранения данных из XML-каталогов OZON.ru — база данных. Это может потребоваться, если необходимо реализовать продвинутые алгоритмы работы с данными (фасетный поиск, сложное связывание и т.п.), для ускорения поиска или по другим причинам.
Для импорта данных из XML-каталогов в локальную базу данных можно использовать скрипт
bin/dbimport.php, который, аналогично
bin/autoloader.php, принимает
в качестве параметра путь к XML-каталогу OZON.ru, и затем, если записи в базе устарели,
выполняет импорт новых данных.
В качестве примера рассмотрим импорт данных по GPS-навигаторам в базу данных MySQL.
Для подключения к базе данных необходимо знать четыре параметра:
SERVER — имя или IP-адрес сервера базы данных (например, localhost).USER — имя пользователя в базе данных (например, ozonuser).PASSWORD —пароль пользователя (например, ozonpassword).DB — имя базы данных, в которой находятся таблицы с информацией о
GPS-навигаторах (например, ozondb).Чтобы настроить эти параметры, нужно отредактировать файл bin/dbimport.php и задать
в нем эти значения:
define('SERVER', 'localhost'); // сервер базы данных define('USER', 'ozonuser'); // имя пользователя define('PASSWORD', 'ozonpassword'); // пароль define('DB', 'ozondb'); // имя базы данных
Далее необходимо настроить имена таблиц, используемых в вашей базе данных, для хранения информации о товарах, категориях и связях между товарами и категориями:
OFFER_TABLE_NAME — имя таблицы для хранения товаров.CATEGORY_TABLE_NAME — имя таблицы для хранения категорий.OFFER_CATEGORY_TABLE_NAME — имя таблицы для хранения связей между товарами и категориями.Значения этих параметров нужно так же отредактировать в файле bin/dbimport.php:
define('OFFER_TABLE_NAME', 'ozon_offer'); // таблица для хранения товаров define('CATEGORY_TABLE_NAME', 'ozon_category'); // таблица для хранения категорий define('OFFER_CATEGORY_TABLE_NAME', 'ozon_offer_category'); // таблица для хранения связей
Таблицы, в которых хранятся данные о товарах, категориях и связях между ними, могут иметь разную структуру в зависимости от нужд вашего сайта.
Для создания таблиц с информацией о GPS-навигаторах запустим следующий SQL-код:
-- Таблица для хранения информации о товарах create table ozon_offer ( offer_id int not null primary key, offer_price float not null, offer_picture varchar(255), offer_title varchar(255), offer_vendor varchar(255), offer_description text ); -- Таблица для хранения информации о категории create table ozon_category ( category_id int not null primary key, category_parent_id int, category_name varchar(255) ); -- Таблица для хранения информации о принадлежности товара к категориям create table ozon_offer_category ( offer_id int not null, category_id int not null );
Скрипт bin/dbimport.php работает с данными о товарах в простом текстовом виде,
где поля данных разделены табуляцией (\t, 0x9), а данные о разных товарах
разделены переводом строки (\n, 0x13):
data\tdata...\n data\tdata...\n ...
Для преобразования XML-каталога в простой текстовый формат bin/dbimport.php использует
XSL-файл src/xsl/db.xsl — в нем как раз и производится настройка формата данных для базы
данных. Откройте его в редакторе и найдите следующий фрагмент, в котором задается формат данных
для таблицы с информацией о товарах ozon_offer. Обратите внмание, как поля разделяются
табуляцией и как вся запись заканчивается переводом строки.
<xsl:template match="offer"> <!-- ID товара --> <xsl:value-of select="@id"/> <xsl:text>	</xsl:text> <!-- табуляция \t --> <!-- Цена товара --> <xsl:value-of select="price"/> <xsl:text>	</xsl:text> <!-- Картинка --> <xsl:value-of select="picture"/> <xsl:text>	</xsl:text> <!-- Название --> <xsl:value-of select="title | name"/> <xsl:text>	</xsl:text> <!-- Автор, производитель или режисер --> <xsl:value-of select="author | vendor | director"/> <xsl:text>	</xsl:text> <!-- Описание товара --> <xsl:value-of select="description"/> <xsl:text> </xsl:text> <!-- перевод строки \n --> </xsl:template>
Т.к. мы предполагаем использовать bin/dbimport.php для импорта только GPS-навигаторов
(набор полей которых нам хорошо известен), отредактируем
src/xsl/db.xsl следующим образом, удалив лишние команды:
<xsl:template match="offer"> <!-- ID товара --> <xsl:value-of select="@id"/> <xsl:text>	</xsl:text> <!-- табуляция \t --> <!-- Цена товара --> <xsl:value-of select="price"/> <xsl:text>	</xsl:text> <!-- Картинка --> <xsl:value-of select="picture"/> <xsl:text>	</xsl:text> <!-- Название --> <xsl:value-of select="name"/> <xsl:text>	</xsl:text> <!-- Производитель --> <xsl:value-of select="vendor"/> <xsl:text>	</xsl:text> <!-- Описание товара --> <xsl:value-of select="description"/> <xsl:text> </xsl:text> <!-- перевод строки \n --> </xsl:template>
Обратите внимание на порядок полей в XSL-файле. Они должны идти в той же последовательности, что и поля в базе данных. В нашем случае: ID товара, цена, картинка, название, производитель, описание.
Формат катеогрий и связей между товарами и категориями в src/xsl/db.xsl соответствует
нашм таблицам, поэтому мы оставим его без изменений:
<xsl:template match="category"> <xsl:value-of select="@id"/> <xsl:text>	</xsl:text> <xsl:value-of select="@parentId"/> <xsl:text>	</xsl:text> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:template> <xsl:template match="categoryId"> <xsl:value-of select="parent::offer/@id"/> <xsl:text>	</xsl:text> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:template>
Для импорта информации из XML-каталога по GPS-навигаторам нам осталось запустить
скипт bin/dbimport.php. Сделать это можно двумя способами: из командной строки, или
обратившись к скрипту через браузер — передав в качестве параметра путь к XML-каталогу для
импорта.
Запуск скрипта из командной строки производится следующим образом:
php dbimport.php gps
Параметр gps, который мы передали, соответствует XML-каталогу для GPS-навигаторов.
Для запуска через браузер наберите в адресной строке следующее:
http://адрес-вашего-сайта.com/путь-к-парсеру/bin/dbimport.php?path=gps
В этом случае путь передается с помощью GET-параметра path.
В результате данные из XML-каталога попадут в базу.
В скрипте bin/dbimport.php реализован импорт данных для сервера баз данных
MySQL, как наиболее распространенного.
Парсер кэширует множество данных. По мере их обновления, старые данные перезаписываются, однако, иногда возникает необходимость удалить временные файлы, т.к. за долгое время работы сайта объем кэша может серьезно вырасти.
Для удаления временных файлов удобнее всего использовать скрипт bin/cacheclean.php. После
его работы в каталоге cache/ могут остаться пустые папки. Они пригодятся для новых закэшированных
данных.
Вопросы о партнерской программе OZON.ru можно задать на форуме на Searchengines.ru.
Любые предложения, вопросы и комментарии по поводу парсера присылайте по адресу davidovsv@yandex.ru.
1.23 — исправлена работа с каталогами после изменений на сайте OZON.ru. Третий уровень временно отключен, т.к. он не поддерживается со стороны OZON.ru.
1.22 — исправлена критическая ошибка в browser.php.
1.21 — добавлен скрипт для удаления временных файлов; исправлена ошибка в кэшировании данных.
1.20 — исправлена ошибка с комплектом установки версии 1.19.
1.19 — улучшена работа кэша; исправлена ошибка с кодировкой в примере; добавлены исключения для некоторых каталогов, у которых нет XML-версии.
1.18 — исправлена ошибка в документации из-за которой не показывались картинки.
1.17 — исключения по каталогам, для которых нет XML-файлов, вынесены в отдельный файл /exceptions.txt.
1.16 — парсер исправлен после появления нового каталона на Озоне.
1.15 — парсер исправлен в соответствии с новой версткой сайта Озона.
1.14 — исправлен скрипт импорта в базу.
1.12 — незначительные исправления в документации.
1.11 — исправлена ошибка в dbimport.php и неверная ссылка на товар.
1.10 — исправлена ошибка в документации и кэшировании данных для получения списка категорий.
1.9 — исправлены ошибки кэширования страниц; ускорены загрузка и преобразование XML-каталогов.
1.8 — первая официальная версия.
Для начала вам нужен настроенный веб-сервер с PHP 5 и библиотеками
для XML и XSL. Предположим, что он у вас уже есть. Вам нужно скачать и распаковать дистрибутив
парсера — на выходе вы получите папку ozonru-parser-XX/, в которой вы найдете
несколько поддиректорий. Это все, что вам нужно для XML-парсинга каталогов OZON.ru.
Код, выполняющий парсинг и преобразование XML-каталогов, инкапсулирован в классы,
содержащиеся в папке src/. Для того, чтобы товары из XML-каталога можно было
представить на вашем сайте, можно использовать разные пути. В данном парсере для представления
данных о товарах из XML-каталога используется XSL. Фактически, он служит для того, чтобы описать,
как будут выглядеть (в HTML- или текстовом формате) те или иные составляющие товара из
XML-каталога. Возьмем в качестве примера описание товара из
XML-каталога GPS-навигаторов:
<offer id="2929274" available="true"> <url>http://www.ozon.ru/context/detail/id/2929274/?from=partner</url> <price>3200</price> <currencyId>RUR</currencyId> <categoryId>1095017</categoryId> <picture>http://www.ozon.ru/multimedia/spare_covers/1000414605.jpg</picture> <delivery>true</delivery> <orderingTime> <ordering>На складе</ordering> </orderingTime> <name>JJ-Connect Fisherman 160</name> <vendor>JJ-Connect</vendor> <description>Новый эхолот JJ-Connect Fisherman 160 отличается увеличенной по сравнению с Fisherman 150 глубиной эхолокации (до 60 м). Подобная величина достигается благодаря повышенной мощности эхолота, которую обеспечивают 4 элемента питания АА, расположенные в отдельном батарейном отсеке. Эхолот соответствует стандарту водозащищенности IPX7, что определяет его беспроблемное использование на воде. Прибор оборудован функцией увеличения изображения на дисплее (Zoom), а также возможностью выбора одного из 5 уровней чувствительности. Отличается компактными размерами, эффективностью и исключительной экономичностью. Отлично зарекомендовал себя при подледном лове. </description> </offer>
Как вы видите, в описании представлена различная информация, и, скорее всего, не вся она должна быть
представлена на вашем сайте. Для фильтрации и форматирования этой информации используется XSL. В
составе парсера есть XSL-файл src/xsl/core.xsl, в котором закодированы фильтры для
различных полей описания товара. Вы можете использовать его, либо написать свои собственные фильтры.
Например, так выглядит фильтр для картинки товара:
<xsl:template match="offer/picture"> <img src="{node()}" alt="{parent::node()/name | parent::node()/title}"/> </xsl:template>
Чтобы просто вывести данные о товрах из какой-либо ветки каталогов OZON.ru всего этого можно не знать, достаточно использовать базовые скрипты парсера. Делается это так:
require_once dirname(__FILE__).'/../src/OzonCatalog.php'; $catalog = new OzonCatalog('gps'); $catalog->transofrm(dirname(__FILE__).'/../web/catalog.xsl');
В дальнейшем, если вам понадобится изменить формат представления товара, вы можете написать собственный XSL-обработчик.
Так же вы можете заглянуть в пример 1, где указанные выше шаги описаны подробно.
Если вы используете XSL на базе src/xsl/core.xsl (например, web/catalog.xsl),
количество товаров на странице можно задать с помощью параметра PAGESIZE прямо
в файле src/xsl/core.xsl, либо передав параметр в XSL из PHP:
$catalog->transofrm(dirname(__FILE__).'/../web/catalog.xsl', array('PAGESIZE'=>50));
Партнерский идентификатор можно задать как непосредственно в файле src/xsl/core.xsl,
так и передав его в качестве параметра при XSL-трансформации:
$catalog->transofrm(dirname(__FILE__).'/../web/catalog.xsl', array('PARTNER'=>'myid'));
При использовании скриптов из папки web/ партнерский идентификатор можно задать
в конфигурационном файле web/config.php.
Специально для этого предусмотрена переменная URL_PARAMS, которая используется
в src/xsl/core.xsl. Значение этой переменной будет один в один подставлено в параметры
ссылки при постраничном выводе. Например, в web/catalog.php эта переменная используется
для передачи пути к XML-каталогу:
$transformer->transform($catalog, array('PAGENUM'=>$page, 'PARTNER'=>$PARTNER_ID, 'URL_PARAMS'=>'path='.urlencode($path)));
Если для представления товаров из XML-каталога вы используете базовый XSL, поставляемый с парсером,
для изменения внешнего вида описания товара на вашем сайте нужно изменить CSS-файл
web/main.css.
Подробнее об изменении внешнего вида описания товара рассказано в примере 3.
Информация о товарах, представленная в XML-каталоге OZON.ru, зависит от типа товара (например,
у книг есть элемент <author>, а у фильмов — <director>).
Для описания полей с информацией о товаре будем
использовать XPath-нотацию (@id — атрибут
с именем "id" — <offer id="...">; url — имя вложенного элемента с именем
"url" — <offer><url/></offer>).
Общие поля:
@id — идентификатор товара.@available — доступность на складе (true или false).url — адрес страницы товара на OZON.ru (может быть легко сконструирован самостоятельно:
http://www.ozon.ru/context/detail/id/{@id}).price — цена товара в рублях (offer/currencyId всегда равен RUR).categoryId — одна или более ссылок на категории, к которым принадлежит товар.picture — ссылка на картинку.delivery — возможность доставки (true или false).orderingTime/ordering — время на поставку товара на склад.description — описание товара (до 1024 символов).Поля, специфичные для книг:
@type="book" — тип товара "книга".author — автор(ы).name — название книги.publisher — издательство.series — серия.year — год издания.ISBN — ISBN издания (или несколько через запятую).binding — типографский формат издания (например, 84x104/32).page_extent — количество страниц.table_of_contents — содержание (список глав через запятую).Поля, специфичные для аудиокниг (в дополнение к полям для книг):
@type="audiobook" — типа товара "аудиокнига".performed_by — голос на записи.Поля, специфичные для фильмов и видео:
@type="artist.title" — тип говорит о том, что у товара есть поле <title>
(поля <artist> у фильмов нет).title — название фильма.year — год выпуска.media — тип носителя (например, DVD).starring — в главных ролях снимались... (список актеров через запятую).director — режиссер.originalName — название на языке оригинала.country — страна-производитель.Поля, специфичные для музыкальных записей:
@type="artist.title" — тип говорит о том, что у товара есть поля <title>
и <artist>.title — название альбома.year — год выпуска.media — тип носителя (например, Audio CD).originalName — название на языке оригинала.artist — исполнитель.Поля, специфичные для музкального видео (в дополнение к полям для музыкальных записей):
starring — в главных ролях снимались... (список актеров через запятую).country — страна-производитель.director — режиссер.Поля, специфичные для товаров электроники, оптики, мобильных телефонов, часов, бытовых приборов, косметики, игрушек, посуды:
name — назване товара.vendor — производитель.vendorCode — код товара по каталогу производителя.Поля, специфичные для старинных гравюр:
name — назване работы.author — автор работы.year — год создания.Поля, специфичные для прочих товаров:
name — назване товара.vendor — производитель.Как правило, такая ошибка появляется, если неправильно указать путь к XML-каталогу OZON.ru. Например,
вы хотите вывести список книг из каталога
«Компьютерная литература»
(ID каталога третьего уровня — 12256), который находится в каталоге второго уровня
«Нехудожественная литература»,
но при этом указываете путь business_catalog/12256 (как если бы он находился в каталоге
второго уровня «Бизнес-книги»).
В этом случае ошибка будет выглядеть примерно так:
Fatal error: Uncaught exception 'BrowserException' with message
'Cannot TEST http://www.ozon.ru/multimedia/yml/partner/business_catalog/12256.xml'
in /.../ozon-parser/src/OzonCatalog.php:104 Stack trace: #0
/.../ozon-parser/src/XSLTransformer.php(38): OzonCatalog->getInfo() #1
/.../ozon-parser/src/OzonCatalog.php(165):
XSLTransformer->transform(Object(OzonCatalog), Array) #2
XSLTransformer->/.../ozon-parser.htm(141):
XSLTransformer->OzonCatalog->transform('ozon-parser/src...', Array) #3
XSLTransformer->{main} thrown in /.../ozon-parser/src/OzonCatalog.php on line 104
Правильный вариант: nonfiction_catalog/12256 — этот путь и надо указать
классам парсера при обращении к выбранному XML-каталогу.
* Парсер — это программа для ЭВМ «Партнерский инструмент для показа товарных каталогов».
Авторские права на программу для ЭВМ «Партнерский инструмент для показа товарных каталогов» принадлежат Давыдову Станиславу Валерьевичу. ООО «Интернет Решения» (ОГРН 1027739244741) является обладателем исключительной лицензии на использование указанной программы на основании Лицензионного договора № ИР-Р 73/09 от 18.12.2009 г. Незаконное воспроизведение или распространение данной программы или любой ее части влечет предусмотренную законом ответственность.