Houston

Рейтинг
22
Регистрация
04.03.2008
Стас Давыдов:

Чтобы все заработало, нужно указать кодировку:

$transformer->transform($catalog,
array('PAGENUM'=>$page, 'PARTNER'=>$PARTNER_ID, 'URL_PARAMS'=>'path='.urlencode($path),
'PATH'=>urlencode($path), 'encoding' => 'windows-1251'));

Возможно вы меня не верно поняли.

Если брать пример web/catalog.php, где для примера выводятся навигаторы - там все понятно. Там кодировка UTF-8.

Но интересует именно "Все каталоги Озон.ру", которые должны открываться на web/index.php.

Если я правильно понимаю, то логика такая:

Идем на сайт http://www.ozon.ru/

Получаем исходный код страницы

Разбираем его по regexp '/<li><a href="\/context\/(?P<links>[^"]+)" title="(?P<title>[^"]+)">/'

Получаем наименование и имя каталога первого уровня.

Далее идем по этим каталогам и получаем 2-ой уровень

Далее 3-й.

Так вот... Когда получаем исходный код для парсинга первого уровня, то он приходит (или где-то внутри обрабатывается) для regexp какой-то странный. Ни UTF-8, ни CP-1251.

А как понял $transformer->transform - работает именно с xml-файлами, которые забирает по указанному пути с сайта. То есть не относится к разбиранию исходного кода сайта для отображения списка каталогов.

Если я не прав - тогда подскажите, где необходимо изменить эту строчку.

Стас Давыдов:

Внес исправление в файлы дистрибутива. Спасибо за информацию.

Спасибо. Только вот вопросик... на странице http://stasdavydov.com/ozonru-parser/ лежит все таже версия 1.15. Причем сравнил файлы - они такие же, как и до внесения вами исправлений. Может я где-то не на той странице смотрю или вы выкладываете версии, когда накопится какое-то значимое количество исправлний?

Помогите разобраться.

Есть парсер 1.15 от Стас Давыдов (http://stasdavydov.com/ozonru-parser/).

Установлен на Windows Server 2003, PHP 5.2.14.

Все тесты парсера на совместимость (bin\check.php) проходят удачно (все с +).

Однако, при попытке получить весь список (web\index.php) разделов выдается ошибка:

Fatal error: Uncaught exception 'OzonException' with message 'Cannot parse catalog links' in ПУТЬ\src\Ozon.php:49 Stack trace: #0 ПУТЬ\web\index.php(11): Ozon::getCatalogList(3) #1 {main} thrown in ПУТЬ\src\Ozon.php on line 49

Как я понял, это связано с разбиранием строки по regexp

if(preg_match_all('/<li><a href="\/context\/(?P<links>[^"]+)" title="(?P<title>[^"]+)">/',

$browser->content, $matches)) {

в файле src\Ozon.php (строка 43). То есть к нему прходит не верный $browser->content.

Если сделать

echo ($browser->content);

выводися абра-дабабра всякая. Причем это явно не CP1251 и не UTF-8. И, как следствие, regexp не может ничего найти...

Попробовал сам понять в чем дело, но возможно, не хватает знаний.

Помогите... как получить весь список ?

Заранее благодарен.