[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
modx.pro
1
3 074
+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 секунд.
            Sergey Leleko
            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?
                    Пытаюсь получить ссылки, не получается
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    30