[xParser] 1.5.0 - Полная поддержка miniShop2 и обновление записей


Наконец-то! Для многих — долгожданный релиз!

Основные нововведения:
  • Поддержка товаров miniShop2 (любые свойства/опции)
  • Поддержка miniShop2 галереи
  • Поддержка ms2Gallery
  • Возможность обновления записей

Обновление записей


Для этого при создании/редактировании задания появилась галочка (по-умолчанию, отключено).


ms2Gallery / miniShop2 галерея


Выгружать изображения в галерею, тоже, достаточно просто. Нужно лишь все изображения собрать в JSON массив при помощи Fenom. Вот таким кодом я собрал все изображения, используемые в контенте спарсенной записи, в JSON массив:
@INLINE {($content | preg_get_all : '!https?://[^"]+\.(?:jpe?g|png|gif)!Ui') | toJSON}

На выходе, компонент превращает его в обычный массив PHP и по-очереди выгружает в галерею.

Особенности работы с miniShop2 товарами


Есть ряд особенностей, которые следует соблюдать, при создании ms2 товаров при помощи xParser.

1) В конфигурации задания нужно выбрать раздел с типом «Категория товаров».

2) В полях задания нужно создать поле resource | class_key, со значением по-умолчанию: msProduct

3) Для корректной выгрузки таких полей, как tags, color, size и т.п. при создании полей задания была добавлена настройка «Раскодировать JSON строку в массив». Дело в том, что при создании товаров через процессор, miniShop2 ждет от нас PHP массив для этих полей, поэтому для корректной выгрузки такого типа полей, нужно раскодировать JSON в PHP. К примеру, вот:


msOptionsPrice2


Вот этого компонент пока не поддерживает. Будем внедрять, если найдется спонсор.

P.S.


Компонент скоро будет стоить дороже на 1-2к. Поэтому, если собираетесь покупать — сейчас самое время!
Павел Гвоздь
04 ноября 2017, 12:42
1
1 399
+7

Комментарии: 30

Андрей
04 ноября 2017, 15:54
+1
Спасибо, класс!))
Александр Мельник
04 ноября 2017, 18:05
+1
Я правильно понимаю суть компонента? Можно указать любой сайт в качестве источника для парсинга, скажем сайт поставщика товаров, задать какие-то соответствия, задать уровень вложенности по которому нужно искать товары и компонент сам создаст товары в магазине?
    Николай Савин
    04 ноября 2017, 22:36
    0
    Очень примерно — правильно.
      Александр Мельник
      04 ноября 2017, 22:56
      0
      Спасибо.
      Жаль что нельзя заплатить очень примерными деньгами))
      Ну а если без шуток — у нас сейчас работает отдельно человек, который пишет программы парсинга индивидуально для каждого сайта. Потому, что информация на сайтах очень различается по подаче, оформлению, структуре. Где-то характеристики товаров не отображаются, пока не пролистать страницу, а потом грузятся аяксом, где-то изображения товаров это не простые ссылки — это закодированные svg файлы, которые вставляются через JS и защищены от копирования… Все это парсится в XLSX, потом вручную проверяется менеджерами и то — при импорте в minishop все проходит очень не гладко. Если кто-то все это предусмотрел в одном компоненте — я снимаю шляпу.
Руслан Алеев
18 ноября 2017, 15:59
0
Здравствуйте! Может кто встречался с проблемой:
Создал тестовое задание на парсинг 10 ресурсов с картинками в категорию miniShop (как товар с галереей), запустил из cron — в результате, 7 ресурсов идет в категорию miniShop, как и нужно, а 3 ресурса идут как дочерние ресурсы категории miniShop — см. http://clip2net.com/s/3Pz3nrd
Как исправить?
    Руслан Алеев
    20 ноября 2017, 16:18
    0
    UPD: Проблема решилась, спасибо автору дополнения. Проблема была в том, что некоторые страницы были другой верстки, нежели страницы, под которые настраивался парсинг.
Igor Ivanov
28 ноября 2017, 13:36
0
Павел, а получится парсить отзывы о товаре с яндекс.маркета? И вставлять их в табличку customExtra?
    Павел Гвоздь
    29 ноября 2017, 11:37
    0
    а получится парсить отзывы о товаре с яндекс.маркета
    Ну если на маркете в отзывах есть структура страницы, которая подгружается в коде страницы, то можно парсить.

    И вставлять их в табличку customExtra
    Тут сложнее. Пока не реализован функционал работы со сторонними объектами (не ресурсами). Однако, всегда можно проспонсировать доработку. Если интересно — пишите мне в ТП на modstore.
Алексей
29 ноября 2017, 16:55
0
немного не понял вот эти строки:
На выходе, компонент превращает его в обычный массив PHP и по-очереди выгружает в галерею.
Как всетаки заставить xparser загружать изображения в галерею? можно по-шагам. В документации не нашел тоже ничего по этому вопросу.
    Алексей
    29 ноября 2017, 20:33
    +1
    в общем все понятно, разобрался! полезная ссылка для модификатора preg_get_all
    непонятно только что делать вот с этим делом:
    как бороться с max_execution_time лимитом при парсинге даже около ~50 страниц это занимает больше обычных 60 секунд.
      Сергей Лелеко
      30 ноября 2017, 06:38
      0
      Дак увеличьте в пхп этот лимит :)

      либо в php.ini либо через .htaccess если у вас апачи
        Алексей
        30 ноября 2017, 10:50
        0
        оказалось — проще. просто запустить скрипт cron'а из консоли. тогда все лимиты времени побоку
        Павел Гвоздь
        01 декабря 2017, 00:32
        0
        Лимит увеличивать не нужно, это чревато плохими последствиями.
Василий Столейков
12 декабря 2017, 14:50
+1
xParser работает только с ресурсами MODX?
Есть ли возможность с помощью данного компонента парсить данные в свою таблицу, чтобы не перегружать дерево ресурсов?
    Павел Гвоздь
    12 декабря 2017, 23:27
    0
    Увы, сейчас такой возможности нет.
Игорь
16 марта 2018, 00:52
0
К сожалению, срок техподдержки истек, поэтому прошу ответить на вопрос — может ли xParser преобразовать относительные URL в абсолютные для их передачи из основного задания в дополнительное?

Пример относительных URL донора на полную версию новости:
<a href="news-1">Новость 1</a>
вместо абсолютных:
<a href="https://site.com/news-1">Новость 1</a>
При попыке выполнить задание, xParser вполне обосновано пишет в лог ошибки-
PHP warning: file_get_contents(news-1): failed to open stream: No such file or directory
    Павел Гвоздь
    16 марта 2018, 13:56
    1
    +1
    Это очень просто! С помощью Fenom:
    @INLINE http://site.ru/{$link}
      Игорь
      16 марта 2018, 19:12
      0
      Спасибо! Не сочтите за наглость, а как можно получить значения метатегов с помощью RegExp?

      Например
      <meta property="og:image" content="http://site.com/images/image.jpg"/>
      Пишем «регулярку»
      <meta[^<>]*?og:image['"][^<>]*?content=['"*)*)*)*)*)[(*^<>]*?)['"]
      Проверяем на валидность, все работает
      https://regex101.com/r/N8oNHE/1
      Вставляю «регулярку» в xParser — пусто.

        Павел Гвоздь
        16 марта 2018, 19:22
        0
        Сорри, но я не знаю, что это за регулярка такая. Можно ведь гораздо проще…
Игорь
18 марта 2018, 01:30
0
Друзья, кто может помочь — правильно составить XPath выражение для получения метатегов. Гугл подсказывает:
.//meta[@name='description']/@content

.//*[@name='description']/@content

но в XPath мне так и не удалось получить значение поля content в метатеге «description» (пробовал разные вариации).
    Павел Гвоздь
    18 марта 2018, 11:09
    1
    +2
    Я писал в доке, что XPath парсер у либы, которая используется для обработки, кривой. Лучше юзайте RegExp:
    /<meta[^>]+og:image['"]{1}[^>]+content=['"]{1}([^>]+)['"]{1}/usi
      Игорь
      18 марта 2018, 15:46
      0
      Спасибо, Павел! Больше всего не хотелось отвлекать именно вас на составление «регулярок».

      Но у меня есть вопрос именно по работе xParser — при запуске задания обрабатываются (копируются) ровно 20 записей, хотя в конфигурации указано от 1 до 100 (все 100 записей в коде страницы донора есть, пагинация отсутсвует).
      Проблема решается перезарузкой в браузере страницы с запущенным заданием, изменением кофикурации (указываем с 20 до 100) и повторным запуском xParser. При этом он обработает (скопируют) следующие 20 записей (с 20 по 40). В логе ошибок нет, как будто парсер просто «зависает».

      Перечитал документацию, комментарии — нигде об этой особенности не упоминается. Может отработка по 20 заданий специально предусмотрена для работы через крон?
        Павел Гвоздь
        18 марта 2018, 17:08
        0
        Возможно, это просто срабатывает time limit на выполнение скрипта из веба.
        Андрей
        03 апреля 2018, 12:34
        0
        Мне помогала такая настройка в файле parser.php
        $modx->exec('set session wait_timeout=28800');
        Это если я запускал парсер через консоль.
Максим
10 апреля 2018, 23:29
0
Подскажите, пытаюсь сохранить изображение в данное поле files|ms2gallery с источником
@INLINE {($product_images | preg_get_all : '/href="([^"]+)"/') | toJSON}
При просмотре вижу массив но по какой то причине не сохраняем в чем может быть дело?
    Павел Гвоздь
    11 апреля 2018, 09:33
    0
    Напишите в ТП Modstore. Посмотрим, в чём дело.
Максим
13 апреля 2018, 16:56
0
Всем привет! Кто нибудь пробовал в первое задание засовывать sitemap.xml?
Пытаюсь получить ссылки, не получается