[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, 15:42    Павел Гвоздь   
1    1105 +7


Комментарии ()

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

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

                либо в php.ini либо через .htaccess если у вас апачи
                1. Алексей 30 ноября 2017, 10:50 # 0
                  оказалось — проще. просто запустить скрипт cron'а из консоли. тогда все лимиты времени побоку
                  1. Павел Гвоздь 01 декабря 2017, 00:32 # 0
                    Лимит увеличивать не нужно, это чревато плохими последствиями.
                    1. Сергей Лелеко 01 декабря 2017, 06:19 # 0
                      Например?
              2. Василий Столейков 12 декабря 2017, 14:50 # +1
                xParser работает только с ресурсами MODX?
                Есть ли возможность с помощью данного компонента парсить данные в свою таблицу, чтобы не перегружать дерево ресурсов?
                1. Павел Гвоздь 12 декабря 2017, 23:27 # 0
                  Увы, сейчас такой возможности нет.
                2. Игорь 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
                  1. Павел Гвоздь 16 марта 2018, 13:56 # +1
                    Это очень просто! С помощью Fenom:
                    @INLINE http://site.ru/{$link}
                    1. Игорь 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 — пусто.

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

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

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

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

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