Полноценный RSS parser (полная поддержка RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3) средствами 1С (без DOM)

15.05.10

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

RSS парсер позволяет разобрать XML сообщение форматов RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3 и разложить в таблицу новостей, где каждое поле исходного XML файла займет свою строго определенную колонку в таблице.
При кажущейся простоте задачи, она сильно усложняется обилием несовместимых форматов RSS лент, а кроме этого фривольным названием тэгов в новостях и каналах.
Проверить работу парсера теперь можно прямо из обработки

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
RSS parser
.epf 32,98Kb
70 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Данный RSS парсер портирован на язык 1С из PHP. 
Исходным кодом RSS парсера послужил

"Project: MagpieRSS: a simple RSS integration tool 
File: rss_parse.inc - parse an RSS or Atom feed return as a simple object."

author Kellan Elliott-McCrea
version 0.7a
license GPL
The lastest version of MagpieRSS can be obtained from:
http://magpierss.sourceforge.net

Не знаю как обстоят дела с копирайтом при переписывании алгоритма на другой язык (думаю никак), но на всякий случай будте осторожны при использовании в коммерческих реализациях.

 Библиотека функций парсера помещена во внешнюю обработку в модуль объекта.

Проверить работу парсера теперь можно прямо из обработки (обновленаCool)

Как использовать:

Скопируйте функции из обработку в конфигурация в общий модуль (или куда вам нравиться).

Файл xml необходимо предварительно скачать на локальный (сетевой диск) например такой функцией:

 

Функция ЗапроситьФайлыССервера(СерверИсточник, СтрПарам, ИмяВходящегоФайла, ИспользоватьПрокси=ложь, ПроксиАдрес = "", ПроксиПользователь= "", ПроксиПароль = "", ПроксиПорт="")  экспорт
   
Попыток = 10;

~Проба:если Не ИспользоватьПрокси тогда
       
HTTP = Новый HTTPСоединение(СерверИсточник);
    иначе
       
ПроксиСервер = новый ИнтернетПрокси();
       
ПроксиСервер.Пользователь = ПроксиПользователь;
       
ПроксиСервер.Пароль = ПроксиПароль;
       
ПроксиСервер.Установить("http",ПроксиАдрес,ПроксиПорт);
       
HTTP = новый HTTPСоединение(СерверИсточник,,,,ПроксиСервер);
    конецесли;
    Попытка

       
HTTP.Получить("", ИмяВходящегоФайла);
        возврат истина;
    Исключение
       
ДСообщить(ОписаниеОшибки());
        если
Попыток>0 тогда
           
Попыток = Попыток-1;
        перейти
~Проба;
        конецесли;
        Если
ТипЗнч(HTTP) <> Тип("HTTPСоединение") тогда
           
Сообщить(НСтр("ru = 'Соединение с сервером не установлено'; en = 'Conection with server not established'; ge = 'Conection with server not established'"));
            возврат неопределено;
        конецесли;
    КонецПопытки;
    возврат истина;
КонецФункции

После того как файл скачен его можно парсить.

Для этого воспользуйтей оригинальной функцией:

MagpieRSS(ИмяФайлаXML), где в качестве параметра передается имя файл с полным путем.

Но данная функция возвращает не очень удобный объект для работы.

Поэтому рекомендую воспользоваться моей функцией, которая сама вызовет MagpieRSS, а возвращенный объект преобразует в таблицуЗначений.

ПолучитьТаблицуНовостей(СоответствиеПолей, ФайлRSS)

Второй параметр, файл XML с полным именем (включающим путь), а первый  - соответствие, где:

Ключ: ТипТэга[ChannelTag/NewsTag] + "_" + ПолеИсточника

Значение: Структура(DBField:ПолеНовостиБД, Date:Признак необходимости конвертирования в дату)

Смысл соответствия в том,  что в него вы помещаете все поля (тэги), которые вам надо получить из канала иновостей. Тэги бывают общие для канала и тогда перед именем ставим "ChannelTag_" и новостные и тогда перед именем ставим "NewsTag_". 

Структура содержит два элемента. 

Первый - строка - название колонки, куда будет помещаться контент из тэга ключа 

если для разных тэгов источника указана одинаковая колонка, то информация суммируется через пробел (кроме тэгов даты).

Второй - булево - признак, что данная колонка таблицы является датой формата 1С инадо исходные данные парсить в дату. 

Отдельным вопросом стоит определение исходных названий тэгов для источника, так как сздесь наблюдается отсутствие четкой практики. 

Получить список тэгов канала можно моей следующей функцией:

 

Процедура FillSourceTags()
   
HTMLtext    =   "";
   
ТекURL = СтрЗаменить(URL, "http://", "");
   
ЗапроситьФайлыССервера(ТекURL,"", КаталогВременныхФайлов()+"rss.tmp");
   
rss = RSSParser.MagpieRSS(КаталогВременныхФайлов()+"rss.tmp");
   
ComplianceTags = новый ТаблицаЗначений;
   
ComplianceTags.Колонки.Добавить("TagType");
   
ComplianceTags.Колонки.Добавить("SourceTag");
   
ComplianceTags.Колонки.Добавить("ContentExample");


   
Индекс=0;
   
ТэгиКанала = новый ТаблицаЗначений;
   
ТэгиКанала.Колонки.Добавить("Tag");
   
ТэгиКанала.Колонки.Добавить("Content_Example");
    Для каждого
item из rss.channel цикл
       
ПолучитьТэгиРекурсивно(item, ТэгиКанала);
    КонецЦикла;
   
ТэгиНовости = новый ТаблицаЗначений;
   
ТэгиНовости.Колонки.Добавить("Tag");
   
ТэгиНовости.Колонки.Добавить("Content_Example");
    Для каждого
item из rss.items цикл
       
ПолучитьТэгиРекурсивно(item, ТэгиНовости);
    КонецЦикла;
   
ComplianceTags.Очистить();
    Для каждого
Эл из ТэгиКанала цикл
       
НовСтр = ComplianceTags.Добавить();
       
НовСтр.TagType = "ChannelTag";
       
НовСтр.SourceTag = Эл.Tag;
       
НовСтр.ContentExample = Эл.Content_Example;
    КонецЦикла;
    Для каждого
Эл из ТэгиНовости цикл
       
НовСтр = ComplianceTags.Добавить();
       
НовСтр.TagType = "NewsTag";
       
НовСтр.SourceTag = Эл.Tag;
       
НовСтр.ContentExample = Эл.Content_Example;
    КонецЦикла;
    возврат
ComplianceTags;
КонецПроцедуры

Функция
ПолучитьТэгиРекурсивно(Элемент, МассивТэгов)
    если
ТипЗнч(Элемент) = Тип("Соответствие") или ТипЗнч(Элемент) = Тип("Массив") тогда
        Для каждого
Эл из Элемент цикл
           
ПолучитьТэгиРекурсивно(Эл, МассивТэгов);
        КонецЦикла;
        возврат неопределено;
    иначеесли
ТипЗнч(Элемент) = Тип("КлючИЗначение") тогда
       
Знч = ПолучитьТэгиРекурсивно(Элемент.Значение,МассивТэгов);
        если
Знч<>неопределено и МассивТэгов.Найти(Элемент.Ключ,"Tag")=неопределено тогда
               
НовСтр = МассивТэгов.Добавить();
               
НовСтр.Tag = Элемент.Ключ;
               
НовСтр.Content_Example = Знч;
        конецесли;
        возврат неопределено;
    иначе
        возврат
Элемент;
    конецесли;
КонецФункции

Функцию Преобразования строки в дату (используется в функции ПолучитьТаблицуНовостей) брать здесь //infostart.ru/public/70017/

Определить новая ли это новость или та которая уже существует в базе можно при помощи хэширования некоторых полей новости. Иногда каналы передают id новости иногда нет. Для хэширования я использую хэш функцию, которую можно взять здесь

Для компактного хранения результатов хэш функции можно переводить результат в строку такой функцией

Работа парсера еще не достаточно протестирована поэтому если обнаружите ошибки вработе, напишите пожалуйстасюда или на мой Email(kosilov_DOG_inbox.ru).

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    159139    952    317    

479

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    7833    83    0    

78

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    187100    352    287    

413

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.267.x) и БП 3.0 (3.0.194.x). Правила подходят для версии ПРОФ и КОРП.

38000 34200 руб.

15.12.2021    33182    246    64    

187

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62179    79    130    

77

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    201245    668    543    

560

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 34200 руб.

23.07.2020    66865    311    88    

250
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SiAl 76 13.05.10 13:09 Сейчас в теме
Здорово. Но смысл? Есть много более приятных читалок. Если только для саморазвития?
2. kosilov 281 13.05.10 21:06 Сейчас в теме
(1)Это конечно здорово, что ты воспринял моюобработку читалкой.
Но это совсемне так.
Обработка - просто пример использования и совсем не читалка.
Для меня парсер - побочный продукт входящий в состав аналитической базы данных.
3. seermak 664 14.05.10 12:30 Сейчас в теме
{Обработка.RSSparser.МодульОбъекта(888,7)}: Переменная не определена (RSSParser)
rss = <<?>>RSSParser.MagpieRSS(ФайлRSS); (Проверка: Сервер)
просто на вскидку - ошибка
4. kosilov 281 15.05.10 03:24 Сейчас в теме
(3) Исправил. Эти функции остались в общем модуле и у меня ошибки не было при проверке. Сейчас перенес их в обработку.
5. seermak 664 15.05.10 10:15 Сейчас в теме
пропали надписи на кнопках Получить поля Получить новости
6. kosilov 281 15.05.10 10:46 Сейчас в теме
(5) Исправил, но это какой-то глюк 1С. При открытии обработки в конфигураторе, где установлен другой набор языков локализации надписи стираются.
7. pako_amadi 07.12.11 11:02 Сейчас в теме
Не плохо. особенно при интеграции с внешними веб приложениями
8. ИТ-Терминал 320 19.05.16 08:41 Сейчас в теме
Добрый день

Источник <rss version="2.0">
При попытке "Получить поля" выходит ошибка:
{Форма.RSSparser.Форма(119)}: Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: Couldn't resolve host name

что можете посоветовать, куда "копнуть"?
9. ИТ-Терминал 320 19.05.16 08:42 Сейчас в теме
На всякий случай версия платформы - 1С:Предприятие 8.3 (8.3.5.1383)
Для отправки сообщения требуется регистрация/авторизация