Полноценный 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 лент, а кроме этого фривольным названием тэгов в новостях и каналах.
Проверить работу парсера теперь можно прямо из обработки

Скачать исходный код

Наименование Файл Версия Размер
RSS parser
.epf 32,98Kb
70
.epf 32,98Kb 70 Скачать

Данный 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! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    135449    729    291    

391

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20527    136    38    

93

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    68750    179    139    

111

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

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

28000 руб.

23.07.2020    46680    199    64    

162

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    34364    81    58    

78

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

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

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 руб.

10.07.2018    67676    41    122    

46

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9294    9    8    

11

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    151270    366    376    

502
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SiAl 76 13.05.10 13:09 Сейчас в теме
Здорово. Но смысл? Есть много более приятных читалок. Если только для саморазвития?
2. kosilov 275 13.05.10 21:06 Сейчас в теме
(1)Это конечно здорово, что ты воспринял моюобработку читалкой.
Но это совсемне так.
Обработка - просто пример использования и совсем не читалка.
Для меня парсер - побочный продукт входящий в состав аналитической базы данных.
3. seermak 665 14.05.10 12:30 Сейчас в теме
{Обработка.RSSparser.МодульОбъекта(888,7)}: Переменная не определена (RSSParser)
rss = <<?>>RSSParser.MagpieRSS(ФайлRSS); (Проверка: Сервер)
просто на вскидку - ошибка
4. kosilov 275 15.05.10 03:24 Сейчас в теме
(3) Исправил. Эти функции остались в общем модуле и у меня ошибки не было при проверке. Сейчас перенес их в обработку.
5. seermak 665 15.05.10 10:15 Сейчас в теме
пропали надписи на кнопках Получить поля Получить новости
6. kosilov 275 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)
Оставьте свое сообщение