[xParser] Парсер RSS лент

Парсер контента RSS лент, с возможностью скачивания медиа-контента на сайт.

При добавлении полей ленты, которые надо парсить, вместо названия поля (title или enclosure[url]) можно указать @INLINE чанк, который будет обработан Fenom. Благодаря этому, в этих полях можно выстраивать совершенно любую логику, вплоть до создания новых разделов «на ходу».

Подробнее о работе


Стояла задача, как можно больше упростить взаимодействие с компонентом, поэтому жду мнений, насколько компонент прост в управлении.

Добавляем задание

Заходим на страницу компонента, жмём Добавить задание => Добавить RSS-ленту.
На вкладке Основное заполняем примерно так:


Переключаемся на вкладку Конфигурация, где можно указать:
  • Шаблон для создаваемых ресурсов,
  • Контекст,
  • Родительский контейнер в пределах выбранного контекста,
  • Сконфигурировать скачивание медиа-контента,
  • При необходимости поменять базовый тег ленты и базовый тег записи.

Расширения медиа-контента и папки для сохранения каждого из расширений указываются в JSON.

Жмём Сохранить — задание добавлено!

Добавляем поля для парсинга

На только что добавленном задании нажимаем правой кнопкой и выбираем Поля задания:

Откроется список полей задания, который пока пуст.

Помимо добавления полей задания мы можем просмотреть Массив значений ленты — это распечатанный массив с данным из первой записи ленты:


Запоминаем названия полей, которые нам надо парсить на сайт и кликаем Добавить поле. Откроется окошко с возможностью указать:

  1. Системное поле. Выпадающий список системных полей ресурса и ТВ-полей.
     
  2. Поле в источнике. Текстовое поле, в которое нужно ввести наименование тега в RSS-ленте.
    Можно указать @INLINE чанк, который будет обработан Fenom из pdoTools. В чанке содержатся плейсхолдеры всех возможных полей из RSS-ленты, которые имеются в записи между тегами item, а также массив с настройками задания $_task.
    За счёт внедрения в данное поле Fenom, можно будет, получая значение из тега category (как например в RSS Lenta.ru) делать выборку по базе ресурсов, в поисках ID аналогичной категории на нашем сайте, а если не найдено — добавлять.
    Тег enclosure и ему подобные, указываются либо через чанк: «@INLINE {$enclosure['url']}», либо в виде CSS селектора: «enclosure[url]».
    Если не указано или значение по данному полю в ленте пустое, то в качестве значения для Системное поле будет взято значение из следующего поля — Значение по-умолчанию.
     
  3. Значение по-умолчанию. В данном поле можно указать значение, которое будет записано в Системное поле. Например, если мы в Системное поле выбрали class_key, то, чтобы создавались Тикеты, мы в поле Значение по-умолчанию пишем «Ticket», а Поле в источнике оставляем пустым.
    Такую же «магию» можно сделать и с полем published, указав в значении по-умолчанию цифру «1». Тогда ресурс на сайт будет добавляться сразу опубликованным.


Помимо основых полей с данными, которые необходимо выгрузить на сайт, нам надо ещё добавить поле, по которому пакет будет понимать, что данная запись уже есть на сайте. Для этого добавляем новое поле, значение Системное поле оставляем пустым, а в Поле в источнике пишем, например, «guid» (потому что он менее всего подвержен изменениям). Должно быть как-то так:

Сохраняем. В списке полей на этом поле ставим указатель Уникальное поле (кнопка со звездой слева):


Всё готово к парсингу, как к единоразовому, так и к ежеминутному (у компонента есть скрипт для запуска заданий из крона).

Спасибо Владимиру за спонсорскую поддержку!

P.S. Владимиру этим компонентом, даже, как-то удавалось запускать импорт из WordPress в MODX. Надеюсь, он нам расскажет, как это сделать.

А теперь о развитии


  1. 1990 рублей — это не окончательная стоимость компонента, по мере развития стоимость будет только повышаться. Готово!
  2. Компонент будет расширяться до парсера HTML контента. Готово!
  3. Есть идея совмещения типов парсера (RSS лент и HTML контента). К примеру, в RSS лентах всегда присутствует ссылка на полную статью. В планах сделать так, чтобы воспользовавшись этим полем со ссылкой, передавать задание парсинга из RSS ленты в соседнее задание, которое настроено именно на этот HTML контент. Естественно, данная идея будет реализована только после того, как реализуется сам тип заданий «HTML контент». Готово!
  4. Будет внедрена поддержка ms2Gallery, UserFiles2, modClassVar. Что ещё?
  5. Если есть интересные идеи развития компонента — высказывайтесь.

Купить дополнение в modstore.pro

Павел Гвоздь
30 ноября 2016, 23:15
8
7 016
+27
Поблагодарить автора Отправить деньги

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

Yar
Yar
28 ноября 2016, 14:29
+1
Интересна агрегация и публикация HTML контента по ключевым фразам из выдачи Яндекса и Гугл.
Например, мне нужен документ на сайте с заголовком (ключевой фразой) «Парсеры RSS лент», а xParser его автоматически создаст из результатов выдачи посковиков.
    Yar
    Yar
    01 декабря 2016, 12:14
    1
    0
    Для начала подойдет сбор RSS лент по ключевой фразе в задании. Одна фраза на один документ с rss подборкой.

      Павел Гвоздь
      01 декабря 2016, 12:17
      0
      Опишите подробнее.
        Yar
        Yar
        01 декабря 2016, 14:37
        1
        0
        К примеру, мне нужен ресурс на сайте с заголовком (ключевой фразой) «Как Трамп изменил жене с Хиллари», а xParser автоматически создаст и опубликует подборку из rss лент, в которых ключевая фраза встречается.
          Владимир
          01 декабря 2016, 14:56
          0
          Извини, на секунду влезу в ваш диалог,
          xParser автоматически создаст и опубликует подборку из rss лент
          — парсер 1. ищет сайты по теме, 2. ищет ленты на сайтах, 3. создает задания на парсинг, 4. публикует… так?
            Yar
            Yar
            01 декабря 2016, 15:09
            0
            Получается так.
            В первом пункте можно в ручную задать тематику сайтов для поиска «Политика». А еще лучше, чтобы парсер брал тематику из названия рубрики, в которой будет публиковать подборку.
        Yar
        Yar
        01 декабря 2016, 15:24
        0
        В общем, нужен автоматический генератор и публикатор текстов по заданной фразе…
        Надоело платить тупым копирайтерами за тексты, которые приходится почти полностью переписывать. Лучше я один раз заплачу тебе и буду редактировать тексты от парсера.
        P.S. — не тупые копирайтеры мне пока не по карману
Евгений Борисов
28 ноября 2016, 21:07
+3
Как-то так youtu.be/yQF0qhARbSw
    Павел Гвоздь
    28 ноября 2016, 21:15
    +2
    Имеется ввиду, что надо сделать экранирование MODX тегов в тексте, полученном из RSS ленты?
Сергей Лим
29 ноября 2016, 02:46
0
Хотелось бы парсинг json/xml
    Павел Гвоздь
    29 ноября 2016, 02:47
    +1
    XML есть итак, ибо RSS = XML. JSON будет.
      Сергей Лим
      29 ноября 2016, 02:49
      0
      Тогда скидок хотим)
        Павел Гвоздь
        29 ноября 2016, 02:50
        +1
        Думаю, что modstore не станет изменять традициям и под Новый Год скидки будут, как и в прошлом году. :)
      Андрей
      12 февраля 2017, 21:10
      0
      А он совместим с MiniShop? Можно ли при парсинге создавать товары?
        Павел Гвоздь
        12 февраля 2017, 21:33
        0
        Можно.
          Андрей
          12 февраля 2017, 21:37
          0
          Павел, интересен такой функционал. Есть ссылка на XML выгрузку поставщика. Можно ли парсером его разбирать, создавая при этом товары (это вы уже ответили), а в дальнейшем например запускать парсинг раз в сутки и если товар уже есть, то просто сверять в нем поля, на изменения. Если товар в выгрузке новый и его нет еще на сайте, то создавать его, если товар удален в выгрузке, то на сайте ставить ему какой-либо статус (недоступен, под заказ ну или типа того).
            Павел Гвоздь
            12 февраля 2017, 21:41
            0
            Нет, такой функционал ещё не реализован. Редактирование уже существующих ресурсов вообще не предусмотрено. То, что вы описали, можно сделать по событию на плагин. Не очень много придётся дописывать в плагине… относительно не много… однако и возможности прикрутить свой плагин пока нет, ибо такой функционал пока не требовался ни одному пользователю пакета, но некоторые наработки в этом направлении уже есть.
              Андрей
              12 февраля 2017, 21:43
              0
              Получается пока компонент не может обновлять данные в уже существующих ресурсах?
Павел Гвоздь
01 декабря 2016, 10:39
+1

Кто украл то?) На днях, как будто, было больше.
    Владимир
    01 декабря 2016, 10:42
    +1
    Забавно)) Я лично видел более 6ти точно. И минусов нет. Мистика!
    Александр Семенов
    01 декабря 2016, 11:40
    +2
    Поставил + и он показал рейт 19
      Василий Столейков
      01 декабря 2016, 12:07
      1
      +4
      Поставил + и он показал +20, обновил страницу — показывает +3 ))
Александр Н
01 декабря 2016, 20:50
+2
Супер!
такой компонент очевидный вклад в популяризацию MODX)
taxsin
02 декабря 2016, 14:56
0
[2016-12-02 14:55:31] (ERROR @ /var/www/www-root/data/www/mattera.guru/core/xpdo/om/xpdoobject.class.php : 240) Error 42S02 executing statement: 
Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'seofucktor.adv_xparser_tasks_rss' doesn't exist
)
Добрый день. Установил модуль а он ошибки выдает(

При установке выдавало ошибку
Could not create table `adv_xparser_tasks_rss` SQL: CREATE TABLE `adv_xparser_tasks_rss` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `task` INT(10) unsigned NULL DEFAULT '0', `url` VARCHAR(500) NOT NULL DEFAULT '', `tag_channel` VARCHAR(40) NOT NULL DEFAULT '', `tag_item` VARCHAR(40) NOT NULL DEFAULT '', PRIMARY KEY (`id`), INDEX `task` (`task`), INDEX `url` (`url`), INDEX `tag_channel` (`tag_channel`), INDEX `tag_item` (`tag_item`)) ENGINE=MyISAM ERROR: Array ( [0] => 42000 [1] => 1071 [2] => Specified key was too long; max key length is 1000 bytes )

Подскажите как это можно исправить?
    Павел Гвоздь
    02 декабря 2016, 15:14
    +1
    Пишите в поддержку на modstore. Заодно скидывайте доступ в админку. Очень похоже на ошибку MODX.
      taxsin
      02 декабря 2016, 16:48
      0
      Отправил
        Павел Гвоздь
        02 декабря 2016, 19:50
        +1
        Признаю, моя ошибка. Сначала не вник в то, что пишет MySQL. Оказалось, что он пишет о том, что в индексе указан слишком длинный ключ, а максимально допустимая длина — 1000 байт. И правда, у меня поле url — VARCHAR(500) было, следовательно это в UTF-8 — 1500 байт. Поправил.
          Антон
          Антон
          05 января 2017, 18:28
          0
          Можно подробнее расписать про HTML парсинг?
          Есть ли в нем возможность замены слов?
            Павел Гвоздь
            06 января 2017, 12:45
            0
            HTML парсинг действительно готов и ждёт представления сообществу (времени мало на составление документации). В modstore компонент с этим механизмом уже доступен, пока в бета версии и по старой цене. Как только неделя скидок закончится — цена будет поднята, для начала до 3кр.

            По замене слов: опишите подробнее, возможно, что получится решить исключительно средствами Fenom.
              Yar
              Yar
              06 января 2017, 13:43
              +1
              Возможно речь идет об уникализации контента синонимами, чтобы исключить явный копи-паст.
              Nurlan
              08 января 2017, 02:14
              0
              мне кажется цена была поднята еще до того, как неделя скидок закончилась, не?) я вчера собирался покупать и положил в корзину, а сегодня хочу оплатить, уже другая цена :(
                Павел Гвоздь
                08 января 2017, 02:19
                +1
                Всё верно, стоимость уже подняли. Однако сейчас (сегодня) пока можно купить его почти по старой цене, т.к. ещё действует скидка 20%.
                  Nurlan
                  08 января 2017, 02:22
                  0
                  это очень досадно, так как все таки планировал по старой цене купить, был уверен, что цена будет держаться до конца недели скидок, как и вы ранее писали выше.
Yar
Yar
08 января 2017, 13:16
0
Павел, возможен ли в измеримом будущем парсинг HTML документов с сайтов без rss лент?
    Павел Гвоздь
    08 января 2017, 13:19
    +2
    Оно уже есть, начиная с версии 1.1. Просто документацию пока не написал. На днях, на днях…
Максим Степанов
25 января 2017, 10:56
+1
Подскажите, возможно ли парсить объявления с vladivostok.drom.ru/nissan/?
    Павел Гвоздь
    25 января 2017, 12:03
    +1
    На первый взгляд — да.
      Максим Степанов
      25 января 2017, 12:08
      0
      отлично, вот еще такой вопрос — данные по объявлениям будут собираться только со списка автомобилей или можно цеплять больше информации? к примеру подробное описание и изображения vladivostok.drom.ru/nissan/liberty/24939035.html
        Павел Гвоздь
        25 января 2017, 12:10
        +1
        Можно цеплять. О том, как настроить.
          Максим Степанов
          25 января 2017, 12:13
          +1
          спасибо, пойду покупать.
            Павел Гвоздь
            25 января 2017, 12:18
            +1
            Так, стоп. Вам возможно потребуется обход по страницам. Сейчас этого пока не реализовано. Однако добавив, например, первую страницу (или несколько, от 1 до 5, к примеру) можно постоянно выхватывать новые объявления.
              Александр
              16 ноября 2017, 02:07
              0
              А обход по страницам уже появился?
Ольга
08 февраля 2017, 11:34
0
Добрый день, а можно ли парсить и создавать не ресурсы, а новую строку в TV-поле тип ввода migx?
    Павел Гвоздь
    08 февраля 2017, 11:56
    0
    Это можно будет делать в одной из следующих версий. Только делаться это будет через небольшой плагин. Как скоро появится следующая версия с таким функционалом зависит от необходимости данного функционала пользователям компонента.
      Ольга
      08 февраля 2017, 12:05
      0
      Спасибо, за ответ. Если клиент созреет на такой функционал, я вам напишу.
SEQUEL.ONE
14 марта 2017, 03:42
0
Ещё лет 5 назад были подобные грабберы новостные для DLE, конечно RSS это хорошо, но было бы ещё лучше, если бы компонент мог по списку ключевых слов ходить по выдачам разных поисковиков и тырить текста с картинками и остальным. Тоесть быть полноценным парсером, аля доргеном) Если бы сайты в итоге были бы самонаполняемыми, так сказать псевдо сдл'ами (сателитами), то очень бы облегчили жизнь веб мастерам, которые с этого зарабатывают. Для популяризации MODX давно бы уже что-то подобное написали.))) Я бы только всеми руками за был!
    Yar
    Yar
    14 марта 2017, 10:25
    0
    А самое главное — появится практическая выгода от парсинга. А на rss денег не заработаешь и ценность дополнения снижается.
      Владимир
      16 марта 2017, 10:44
      1
      +1
      на rss денег не заработаешь
      — уже зарабатываю :)
        Yar
        Yar
        16 марта 2017, 11:03
        0
        получается, что «не умею зарабатывать»:)
Sergey Leleko
16 марта 2017, 10:27
+2
Ребят кто-то дайте отзыв по парсингу HTML? насколько все успешно работает? И как в плане удобства? а то задумался о покупке компонента
    Владимир
    16 марта 2017, 10:43
    1
    0
    А как использовать предполагаешь?
      Sergey Leleko
      16 марта 2017, 10:47
      0
      ну если парсинг хтмл есть, то как парсер старого сайта. (тексты, картинки или хотябы ссылки на них). Если возможно с форматированием или без. Перенос структуры разделов сайта. Вот минимум, который я хотел бы получить покупая данный компонент.
        Владимир
        16 марта 2017, 10:51
        +1
        Вордпресс я перенес, например, там есть экспорт в хтмл — этот тот же RSS
        Павел Гвоздь
        16 марта 2017, 10:53
        +1
        Этот минимум уже как 3 месяца доступен + еще ряд классных плюшек. :)
        Владимир
        16 марта 2017, 10:57
        1
        +2
        Благодаря использованию фенома, можно тянуть строго нужное, регулярками, просто реплейсом.
        Короче, придется написать об опыте использования.
        На одном сайте xParser — это агрегатор новостей, на другом обмен партнерскими материалами. Использование этого инструмента — вопрос предприимчивости, а может он уже многое.
          Yar
          Yar
          16 марта 2017, 11:14
          +1
          Спасибо за инициативу! А то самому просить, как-то не удобно…
Sergey Leleko
16 марта 2017, 11:58
0
Благодарю за ответы
Sergey Leleko
22 марта 2017, 10:35
0
Уважаемые, может кто-то поделиться / объяснить как примерно настроить парсинг HTML? Инструкций по этому функционалу я так понимаю пока нет
    Павел Гвоздь
    22 марта 2017, 11:58
    0
      Sergey Leleko
      22 марта 2017, 12:02
      0
      Благодарю, невнимательно посмотрел
        Павел Гвоздь
        22 марта 2017, 12:04
        0
        Не смог ответить в ТП modstore, т.к. тикет стал в режим чтения. Видимо из-за новой версии сайта.
          Sergey Leleko
          22 марта 2017, 12:11
          0
          Видимо так, сейчас я его даже увидеть не могу)
Андрей
20 августа 2017, 21:12
0
Можно ли с помощью данного компонента настроить парсинг группы ВК? Чтобы новые записи публиковались на сайте?
    Павел Гвоздь
    20 августа 2017, 21:42
    +1
    В целом — да, можно. Однако все зависит от требований к парсеру. Нужна ли поддержка «постраничности» в ВК, авторизация и т.п.
      Андрей
      20 августа 2017, 22:15
      0
      Я думаю, что пока достаточно из каждого поста в ВК создавать отдельную страницу в сайте, картинки парсить к примеру в TV или в Галерею, ну и текст в содержимое. Если я куплю компонент, в рамках ТП вы поможете настроить его?
        Павел Гвоздь
        20 августа 2017, 22:18
        0
        Однако все зависит от требований к парсеру. Нужна ли поддержка «постраничности» в ВК, авторизация и т.п.
        Если оба пункта «нет», то помогу.
Василий Столейков
06 ноября 2017, 12:09
2
+1
Можно ли с помощью данного компонента сделать парсинг данных (например новостей из разных источников), но сохранять их не в таблицу site_content, а в свою отдельную таблицу, чтобы не перегружать таблицу с ресурсами?
Максим
08 апреля 2018, 23:14
0
Не совсем понятно как реализуется сохранение изображений. И как передавать поля с несколькими значениями. Пытался записать массивом в список с автодополнением minishop2 не получается
    Павел Гвоздь
    09 апреля 2018, 06:56
    0
    И как передавать поля с несколькими значениями.
    Надо передавать в JSON. Читайте вот тут.
    P.S. С ужасом понял, что в docs.modx.pro про работу с ms2 ни слова… Исправим!
Кирилл Киселев
11 сентября 2018, 14:48
0
Это самописный парсер или используется библиотека для парсинга html?
    Павел Гвоздь
    11 сентября 2018, 15:29
    0
    Для разбора документа по CSS или xPath селектору используется DomCrawler.
Андрей Воробей
03 октября 2018, 21:43
0
Здравствуйте, скажите с помощью вашего парсера могу ли я парсить дизайн страницы (например все что в определенном div блоке, с заданным id), после чего вставлять их в свои чанки, и также сохранять css файл к себе? Если да, то могу ли я задать частоту обновления парсинга и/или делать это в ручном режиме?
    Павел Гвоздь
    04 октября 2018, 20:28
    0
    Нет, думаю такое не сделать с xParser. Тут нужно писать кастомное решение.
Alex ZI
07 ноября 2018, 21:48
0
Подскажите пожалуйста, это расширение подойдет под мою цель — которая схожа с функционалом сохранения ссылок страниц — pocket, но только на своем сайте help.getpocket.com/
Если по действиям, то примерно так:
1) нахожу какую то интересную статью (на рус или англ м.б.)
2) копирую ссылку
3) создаю тикет ( у меня сайт на тикетах и феном)
4) тикету даю на вход эту ссылку
5) тикет берт Оглавнение, Описание и сам контент (может даже не весь)
Alex ZI
18 февраля 2019, 23:30
0
Можете показать пример живого сайта где применен этот парсер, например сайт новостной или т.п.?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.