diff --git a/docs/en/md/Instructions/RSS.md b/docs/en/md/Instructions/RSS.md
index 37b580adf0..3707f4094a 100644
--- a/docs/en/md/Instructions/RSS.md
+++ b/docs/en/md/Instructions/RSS.md
@@ -6,7 +6,7 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3,
-# RSS
+# RSS/Atom
import LibraryIntro from '@site/src/components/LibraryIntro';
@@ -26,29 +26,32 @@ RSS (Really Simple Syndication) is a format for distributing news and other webs
### Creating an RSS feed
-To create an RSS feed, use the `СоздатьФидRSS` function:
+To create an RSS feed, use the `CreateFeedRSS` function:
```bsl
-НазваниеКанала = "Мой блог";
-ОписаниеКанала = "Последние новости и статьи";
-СсылкаКанала = "https://example.com";
+ChannelName = "My Blog";
+ChannelDescription = "Latest news and articles";
+ChannelLink = "https://example.com";
-Элементы = Новый Массив;
-Элемент = OPI_RSS.ПолучитьСтруктуруЭлементаФидаRSS(Истина);
-Элемент.title = "Первая статья";
-Элемент.description = "Описание первой статьи";
-Элемент.link = "https://example.com/article1";
-Элемент.pubDate = ТекущаяДата();
-Элемент.author = "author@example.com";
-Элемент.guid = "article1";
-Элементы.Добавить(Элемент);
+Items = New Array;
-ФидRSS = OPI_RSS.СоздатьФидRSS(НазваниеКанала, ОписаниеКанала, СсылкаКанала, Элементы);
+Item = OPI_RSS.GetFeedItemStructureRSS(True);
+
+Item.title = "First article";
+Item.description = "First article description";
+Item.link = "https://example.com/article1";
+Item.pubDate = CurrentDate();
+Item.author = "author@example.com";
+Item.guid = "article1";
+
+Items.Add(Item);
+
+RSSFeed = OPI_RSS.CreateFeedRSS(ChannelName, ChannelDescription, ChannelLink, Items);
```
### RSS element structure
-The `ПолучитьСтруктуруЭлементаФидаRSS` function returns a structure with the following fields:
+The `GetFeedItemStructureRSS` function returns a structure with the following fields:
- **title** — element title
- **description** — element description/content
@@ -59,13 +62,11 @@ The `ПолучитьСтруктуруЭлементаФидаRSS` function ret
### Parsing an RSS feed
-To parse an existing RSS feed, use the `РазобратьФидRSS` function:
+To parse an existing RSS feed, use the `ParseFeedRSS` function:
```bsl
-XMLТекст = "..."; // XML содержимое фида
-Канал = OPI_RSS.РазобратьФидRSS(XMLТекст);
-
-// Канал содержит данные канала и массив элементов в поле "items"
+XMLText = "..."; // XML feed content
+Channel = OPI_RSS.ParseFeedRSS(XMLText);
```
## Working with Atom
@@ -74,31 +75,34 @@ Atom is an alternative content syndication format, more modern and flexible than
### Creating an Atom feed
-To create an Atom feed, use the `СоздатьФидAtom` function:
+To create an Atom feed, use the `CreateFeedAtom` function:
```bsl
-НазваниеФида = "Мой блог";
-СсылкаФида = "https://example.com";
-IDФида = "https://example.com/feed";
+FeedTitle = "My Blog";
+FeedLink = "https://example.com";
+FeedID = "https://example.com/feed";
-Элементы = Новый Массив;
-Элемент = OPI_RSS.ПолучитьСтруктуруЭлементаФидаAtom(Истина);
-Элемент.title = "Первая статья";
-Элемент.id = "article1";
-Элемент.link = "https://example.com/article1";
-Элемент.updated = ТекущаяДата();
-Элемент.summary = "Краткое описание";
-Элемент.content = "Полное содержимое статьи";
-Элемент.author = "Иван Иванов";
-Элемент.published = ТекущаяДата();
-Элементы.Добавить(Элемент);
+Items = New Array;
-ФидAtom = OPI_RSS.СоздатьФидAtom(НазваниеФида, СсылкаФида, IDФида, Элементы);
+Item = OPI_RSS.GetFeedItemStructureAtom(True);
+
+Item.title = "First article";
+Item.id = "article1";
+Item.link = "https://example.com/article1";
+Item.updated = CurrentDate();
+Item.summary = "Brief description";
+Item.content = "Full article content";
+Item.author = "Ivan Ivanov";
+Item.published = CurrentDate();
+
+Items.Add(Item);
+
+AtomFeed = OPI_RSS.CreateFeedAtom(FeedTitle, FeedLink, FeedID, Items);
```
### Atom element structure
-The `ПолучитьСтруктуруЭлементаФидаAtom` function returns a structure with the following fields:
+The `GetFeedItemStructureAtom` function returns a structure with the following fields:
- **title** — element title
- **id** — unique element identifier
@@ -111,13 +115,11 @@ The `ПолучитьСтруктуруЭлементаФидаAtom` function re
### Parsing an Atom feed
-To parse an existing Atom feed, use the `РазобратьФидAtom` function:
+To parse an existing Atom feed, use the `ParseFeedAtom` function:
```bsl
-XMLТекст = "..."; // XML содержимое фида
-Фид = OPI_RSS.РазобратьФидAtom(XMLТекст);
-
-// Фид содержит данные фида и массив элементов в поле "entries"
+XMLText = "..."; // XML feed content
+Feed = OPI_RSS.ParseFeedAtom(XMLText);
```
## Usage features
diff --git a/docs/en/md/Instructions/ReportPortal.md b/docs/en/md/Instructions/ReportPortal.md
index 22b5019b3a..6f2c476a76 100644
--- a/docs/en/md/Instructions/ReportPortal.md
+++ b/docs/en/md/Instructions/ReportPortal.md
@@ -27,12 +27,12 @@ To work with ReportPortal API, you need to obtain an authorization token. There
Obtained based on user login and password and has a limited validity period:
```bsl
-URL = "https://your-reportportal-instance.com";
-Login = "your_username";
+URL = "https://your-reportportal-instance.com";
+Login = "your_username";
Password = "your_password";
Response = OPI_ReportPortal.GetTemporaryToken(URL, Login, Password);
-Token = Response["access_token"];
+Token = Response["access_token"];
```
#### Permanent token
@@ -44,7 +44,7 @@ For long-term use, it is recommended to create a permanent token:
3. Create a permanent token:
```bsl
-UserID = "your_user_id";
+UserID = "your_user_id";
KeyName = "API Key for Integration";
Response = OPI_ReportPortal.GetPermanentToken(URL, Token, UserID, KeyName);
diff --git a/docs/ru/md/Instructions/RSS.md b/docs/ru/md/Instructions/RSS.md
index cbb133f07a..e1e7427ead 100644
--- a/docs/ru/md/Instructions/RSS.md
+++ b/docs/ru/md/Instructions/RSS.md
@@ -6,7 +6,7 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3,
-# RSS
+# RSS/Atom
import LibraryIntro from '@site/src/components/LibraryIntro';
@@ -31,16 +31,19 @@ RSS (Really Simple Syndication) — это формат для распрост
```bsl
НазваниеКанала = "Мой блог";
ОписаниеКанала = "Последние новости и статьи";
-СсылкаКанала = "https://example.com";
+СсылкаКанала = "https://example.com";
Элементы = Новый Массив;
+
Элемент = OPI_RSS.ПолучитьСтруктуруЭлементаФидаRSS(Истина);
-Элемент.title = "Первая статья";
+
+Элемент.title = "Первая статья";
Элемент.description = "Описание первой статьи";
-Элемент.link = "https://example.com/article1";
-Элемент.pubDate = ТекущаяДата();
-Элемент.author = "author@example.com";
-Элемент.guid = "article1";
+Элемент.link = "https://example.com/article1";
+Элемент.pubDate = ТекущаяДата();
+Элемент.author = "author@example.com";
+Элемент.guid = "article1";
+
Элементы.Добавить(Элемент);
ФидRSS = OPI_RSS.СоздатьФидRSS(НазваниеКанала, ОписаниеКанала, СсылкаКанала, Элементы);
@@ -63,9 +66,7 @@ RSS (Really Simple Syndication) — это формат для распрост
```bsl
XMLТекст = "..."; // XML содержимое фида
-Канал = OPI_RSS.РазобратьФидRSS(XMLТекст);
-
-// Канал содержит данные канала и массив элементов в поле "items"
+Канал = OPI_RSS.РазобратьФидRSS(XMLТекст);
```
## Работа с Atom
@@ -78,19 +79,22 @@ Atom — это альтернативный формат синдикации
```bsl
НазваниеФида = "Мой блог";
-СсылкаФида = "https://example.com";
-IDФида = "https://example.com/feed";
+СсылкаФида = "https://example.com";
+IDФида = "https://example.com/feed";
Элементы = Новый Массив;
+
Элемент = OPI_RSS.ПолучитьСтруктуруЭлементаФидаAtom(Истина);
-Элемент.title = "Первая статья";
-Элемент.id = "article1";
-Элемент.link = "https://example.com/article1";
-Элемент.updated = ТекущаяДата();
-Элемент.summary = "Краткое описание";
-Элемент.content = "Полное содержимое статьи";
-Элемент.author = "Иван Иванов";
+
+Элемент.title = "Первая статья";
+Элемент.id = "article1";
+Элемент.link = "https://example.com/article1";
+Элемент.updated = ТекущаяДата();
+Элемент.summary = "Краткое описание";
+Элемент.content = "Полное содержимое статьи";
+Элемент.author = "Иван Иванов";
Элемент.published = ТекущаяДата();
+
Элементы.Добавить(Элемент);
ФидAtom = OPI_RSS.СоздатьФидAtom(НазваниеФида, СсылкаФида, IDФида, Элементы);
@@ -124,5 +128,4 @@ XMLТекст = "..."; // XML содержимое фид
- При создании фидов даты автоматически преобразуются в соответствующие форматы (RFC822 для RSS, ISO8601 для Atom)
- Если дата обновления не указана, используется текущая дата
-- Структуры элементов можно получать как пустыми, так и с описаниями полей для удобства заполнения
- Разбор фидов возвращает структуры с данными канала/фида и массивом элементов
\ No newline at end of file
diff --git a/docs/ru/md/Instructions/ReportPortal.md b/docs/ru/md/Instructions/ReportPortal.md
index eada5de956..c3bc768d1e 100644
--- a/docs/ru/md/Instructions/ReportPortal.md
+++ b/docs/ru/md/Instructions/ReportPortal.md
@@ -27,8 +27,8 @@ ReportPortal — это система управления результата
Получается на основе логина и пароля пользователя и имеет ограниченный срок действия:
```bsl
-URL = "https://your-reportportal-instance.com";
-Логин = "your_username";
+URL = "https://your-reportportal-instance.com";
+Логин = "your_username";
Пароль = "your_password";
Ответ = OPI_ReportPortal.ПолучитьВременныйТокен(URL, Логин, Пароль);
@@ -45,7 +45,7 @@ URL = "https://your-reportportal-instance.com";
```bsl
IDПользователя = "your_user_id";
-ИмяКлюча = "API Key for Integration";
+ИмяКлюча = "API Key for Integration";
Ответ = OPI_ReportPortal.ПолучитьПостоянныйТокен(URL, Токен, IDПользователя, ИмяКлюча);
ПостоянныйТокен = Ответ["apiKey"];
diff --git a/src/en/OInt/api/metrika/Modules/OPI_RSS.os b/src/en/OInt/api/metrika/Modules/OPI_RSS.os
deleted file mode 100644
index dcfde080bd..0000000000
--- a/src/en/OInt/api/metrika/Modules/OPI_RSS.os
+++ /dev/null
@@ -1,581 +0,0 @@
-// OneScript: ./OInt/api/metrika/Modules/OPI_RSS.os
-// Lib: RSS
-// CLI: rss
-// Keywords: rss, atom, feed
-
-// DocsCategory: Other
-// DocsNameRU: RSS/Atom
-// DocsNameEN: RSS/Atom
-
-// MIT License
-
-// Copyright (c) 2023-2026 Anton Tsitavets
-
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-// SOFTWARE.
-
-// https://github.com/Bayselonarrend/OpenIntegrations
-
-// BSLLS:Typo-off
-// BSLLS:LatinAndCyrillicSymbolInWord-off
-// BSLLS:IncorrectLineBreak-off
-// BSLLS:NumberOfOptionalParams-off
-// BSLLS:UsingServiceTag-off
-// BSLLS:LineLength-off
-// BSLLS:UsingSynchronousCalls-off
-
-//@skip-check module-structure-top-region
-//@skip-check module-structure-method-in-regions
-//@skip-check wrong-string-literal-content
-//@skip-check method-too-many-params
-
-#Use "../../../tools/main"
-#Use "../../../tools/http"
-
-#Region Public
-
-#Region RSSMethods
-
-// Create feed (RSS)
-// Creates RSS feed text
-//
-// Parameters:
-// ChannelTitle - String - Channel title - name
-// ChannelDescription - String - Channel description - descr
-// ChannelLink - String - Channel link - link
-// Items - Array of Structure - Feed items. See GetFeedItemStructureRSS - items
-// UpdateDate - Date, Undefined - Update date. Current if not filled - date
-//
-// Returns:
-// String - Channel XML feed
-Function CreateFeedRSS(Val ChannelTitle
- , Val ChannelDescription
- , Val ChannelLink
- , Val Items
- , Val UpdateDate = Undefined) Export
-
- UpdateDate = ?(UpdateDate = Undefined
- , OPI_Tools.GetCurrentDate()
- , UpdateDate);
-
- OPI_TypeConversion.GetLine(ChannelTitle);
- OPI_TypeConversion.GetLine(ChannelDescription);
- OPI_TypeConversion.GetLine(ChannelLink);
- OPI_TypeConversion.GetArray(Items);
- OPI_TypeConversion.GetDate(UpdateDate);
-
- XMLWriter = New XMLWriter;
- XMLWriter.SetString("UTF-8");
-
- XMLWriter.WriteXMLDeclaration();
- XMLWriter.WriteStartElement("rss");
- XMLWriter.WriteAttribute("version", "2.0");
-
- XMLWriter.WriteStartElement("channel");
- WriteXMLItem(XMLWriter, "title" , ChannelTitle);
- WriteXMLItem(XMLWriter, "link" , ChannelLink);
- WriteXMLItem(XMLWriter, "description", ChannelDescription);
-
- DateRFC822 = OPI_Tools.DateRFC822(UpdateDate);
- WriteXMLItem(XMLWriter, "lastBuildDate", DateRFC822);
-
- For Each Element In Items Do
- WriteFeedItem(XMLWriter, Element);
- EndDo;
-
- XMLWriter.WriteEndElement();
- XMLWriter.WriteEndElement();
-
- Feed = XMLWriter.Close();
-
- Return Feed;
-
-EndFunction
-
-// Get feed item structure (RSS)
-// Gets the structure of parameters for an RSS feed item
-//
-// Parameters:
-// Clear - Boolean - True > structure with empty valuse, False > field descriptions at values - empty
-// AsMap - Boolean - True > returns fields as map - map
-//
-// Returns:
-// Structure Of KeyAndValue - Feed item fields structure
-Function GetFeedItemStructureRSS(Val Clear = False, Val AsMap = False) Export
-
- OPI_TypeConversion.GetBoolean(Clear);
- OPI_TypeConversion.GetBoolean(AsMap);
-
- If AsMap Then
- ElementStructure = New Map;
- Else
- ElementStructure = New Structure;
- EndIf;
-
- ElementStructure.Insert("title" , "- ");
- ElementStructure.Insert("description" , "
- ");
- ElementStructure.Insert("link" , "
- ");
- ElementStructure.Insert("pubDate" , "");
- ElementStructure.Insert("author" , "");
- ElementStructure.Insert("guid" , "");
-
- If Clear Then
- ElementStructure = OPI_Tools.ClearCollectionRecursively(ElementStructure);
- EndIf;
-
- //@skip-check constructor-function-return-section
- Return ElementStructure;
-
-EndFunction
-
-// Parse feed (RSS)
-// Parses the XML of an RSS feed and returns a structure with channel data and items
-//
-// Parameters:
-// XMLText - String - XML content of RSS feed - xml
-//
-// Returns:
-// Structure Of KeyAndValue - Channel structure
-Function ParseFeedRSS(Val XMLText) Export
-
- OPI_TypeConversion.GetLine(XMLText);
-
- Channel = New Structure;
-
- XMLReader = New XMLReader;
- XMLReader.SetString(XMLText);
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- If XMLReader.Name = "channel" Then
- Channel = ReadChannelRSS(XMLReader);
- Break;
- EndIf;
-
- EndIf;
-
- EndDo;
-
- XMLReader.Close();
-
- Return Channel;
-
-EndFunction
-
-#EndRegion
-
-#Region AtomMethods
-
-// Create feed (Atom)
-// Creates the text of an Atom feed
-//
-// Parameters:
-// FeedTitle - String - Feed title - name
-// FeedLink - String - Feed URL - link
-// FeedID - String - Feed unique identifier (usually a URL) - id
-// Items - Array of Structure - Feed items. See GetFeedItemStructureAtom - items
-// UpdateDate - Date, Undefined - Update date. Current if not filled - date
-//
-// Returns:
-// String - Atom XML feed
-Function CreateFeedAtom(Val FeedTitle
- , Val FeedLink
- , Val FeedID
- , Val Items
- , Val UpdateDate = Undefined) Export
-
- UpdateDate = ?(UpdateDate = Undefined
- , OPI_Tools.GetCurrentDate()
- , UpdateDate);
-
- OPI_TypeConversion.GetLine(FeedTitle);
- OPI_TypeConversion.GetLine(FeedLink);
- OPI_TypeConversion.GetLine(FeedID);
- OPI_TypeConversion.GetArray(Items);
- OPI_TypeConversion.GetDate(UpdateDate);
-
- XMLWriter = New XMLWriter;
- XMLWriter.SetString("UTF-8");
-
- XMLWriter.WriteXMLDeclaration();
- XMLWriter.WriteStartElement("feed");
- XMLWriter.WriteAttribute("xmlns", "http://www.w3.org/2005/Atom");
-
- WriteXMLItem(XMLWriter, "title", FeedTitle);
- WriteXMLItem(XMLWriter, "id" , FeedID);
-
- XMLWriter.WriteStartElement("link");
- XMLWriter.WriteAttribute("href", FeedLink);
- XMLWriter.WriteAttribute("rel" , "alternate");
- XMLWriter.WriteEndElement();
-
- DateISO8601 = OPI_Tools.DateISO8601(UpdateDate);
- WriteXMLItem(XMLWriter, "updated", DateISO8601);
-
- For Each Element In Items Do
- WriteFeedItemAtom(XMLWriter, Element);
- EndDo;
-
- XMLWriter.WriteEndElement(); // feed
-
- Feed = XMLWriter.Close();
-
- Return Feed;
-
-EndFunction
-
-// Get feed item structure (Atom)
-// Gets the structure of parameters of an Atom feed item
-//
-// Parameters:
-// Clear - Boolean - True > structure with empty valuse, False > field descriptions at values - empty
-// AsMap - Boolean - True > returns fields as map - map
-//
-// Returns:
-// Structure Of KeyAndValue - Feed item fields structure
-Function GetFeedItemStructureAtom(Val Clear = False, Val AsMap = False) Export
-
- OPI_TypeConversion.GetBoolean(Clear);
- OPI_TypeConversion.GetBoolean(AsMap);
-
- If AsMap Then
- ElementStructure = New Map;
- Else
- ElementStructure = New Structure;
- EndIf;
-
- ElementStructure.Insert("title" , "
- ");
- ElementStructure.Insert("id" , "");
- ElementStructure.Insert("link" , "
- ");
- ElementStructure.Insert("updated" , "");
- ElementStructure.Insert("summary" , "");
- ElementStructure.Insert("content" , "");
- ElementStructure.Insert("author" , "");
- ElementStructure.Insert("published" , "");
-
- If Clear Then
- ElementStructure = OPI_Tools.ClearCollectionRecursively(ElementStructure);
- EndIf;
-
- //@skip-check constructor-function-return-section
- Return ElementStructure;
-
-EndFunction
-
-// Parse feed (Atom)
-// Parses the XML of an Atom feed and returns a structure with feed data and items
-//
-// Parameters:
-// XMLText - String - XML content of Atom feed - xml
-//
-// Returns:
-// Structure Of KeyAndValue - Feed structure
-Function ParseFeedAtom(Val XMLText) Export
-
- OPI_TypeConversion.GetLine(XMLText);
-
- Feed = New Structure;
-
- XMLReader = New XMLReader;
- XMLReader.SetString(XMLText);
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- If XMLReader.Name = "feed" Then
- Feed = ReadFeedAtom(XMLReader);
- Break;
- EndIf;
-
- EndIf;
-
- EndDo;
-
- XMLReader.Close();
-
- Return Feed;
-
-EndFunction
-
-#EndRegion
-
-#EndRegion
-
-#Region Private
-
-Procedure WriteXMLItem(XMLWriter, ElementName, Value)
-
- If ValueIsFilled(Value) Then
- XMLWriter.WriteStartElement(ElementName);
- XMLWriter.WriteText(Value);
- XMLWriter.WriteEndElement();
- EndIf;
-
-EndProcedure
-
-Procedure WriteFeedItem(XMLWriter, Element)
-
- OPI_TypeConversion.GetKeyValueCollection(Element);
-
- XMLWriter.WriteStartElement("item");
-
- For Each DataField In Element Do
-
- CurrentKey = DataField.Key;
- CurrentValue = DataField.Value;
-
- If TypeOf(CurrentValue) = Type("Date") Then
- CurrentValue = OPI_Tools.DateRFC822(CurrentValue);
- Else
- OPI_TypeConversion.GetLine(CurrentValue, False);
- EndIf;
-
- If CurrentKey = "guid" Then
- XMLWriter.WriteStartElement("guid");
- XMLWriter.WriteAttribute("isPermaLink", "false");
- XMLWriter.WriteText(CurrentValue);
- XMLWriter.WriteEndElement();
- Else
- WriteXMLItem(XMLWriter, CurrentKey, CurrentValue);
- EndIf;
-
- EndDo;
-
- XMLWriter.WriteEndElement();
-
-EndProcedure
-
-Function ReadChannelRSS(XMLReader)
-
- Channel = New Structure;
- Items = New Array;
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- ElementName = XMLReader.Name;
-
- If ElementName = "item" Then
- Element = ReadItemRSS(XMLReader);
- Items.Add(Element);
- Else
- XMLReader.Read();
- If XMLReader.NodeType = XMLNodeType.Text Then
- Channel.Insert(ElementName, XMLReader.Value);
- EndIf;
- EndIf;
-
- ElsIf XMLReader.NodeType = XMLNodeType.EndElement And XMLReader.Name = "channel" Then
- Break;
- EndIf;
-
- EndDo;
-
- Channel.Insert("items", Items);
-
- Return Channel;
-
-EndFunction
-
-Function ReadItemRSS(XMLReader)
-
- Element = New Structure;
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- ElementName = XMLReader.Name;
- XMLReader.Read();
-
- If XMLReader.NodeType = XMLNodeType.Text Then
- Element.Insert(ElementName, XMLReader.Value);
- EndIf;
-
- ElsIf XMLReader.NodeType = XMLNodeType.EndElement And XMLReader.Name = "item" Then
- Break;
- EndIf;
-
- EndDo;
-
- Return Element;
-
-EndFunction
-
-Procedure WriteFeedItemAtom(XMLWriter, Element)
-
- OPI_TypeConversion.GetKeyValueCollection(Element);
-
- XMLWriter.WriteStartElement("entry");
-
- For Each DataField In Element Do
-
- CurrentKey = DataField.Key;
- CurrentValue = DataField.Value;
-
- If TypeOf(CurrentValue) = Type("Date") Then
- CurrentValue = OPI_Tools.DateISO8601(CurrentValue);
- Else
- OPI_TypeConversion.GetLine(CurrentValue, False);
- EndIf;
-
- If CurrentKey = "link" Then
- XMLWriter.WriteStartElement("link");
- XMLWriter.WriteAttribute("href", CurrentValue);
- XMLWriter.WriteAttribute("rel" , "alternate");
- XMLWriter.WriteEndElement();
- ElsIf CurrentKey = "author" Then
- XMLWriter.WriteStartElement("author");
- WriteXMLItem(XMLWriter, "name" , CurrentValue);
- XMLWriter.WriteEndElement();
- ElsIf CurrentKey = "content" Then
- XMLWriter.WriteStartElement("content");
- XMLWriter.WriteAttribute("type", "html");
- XMLWriter.WriteText(CurrentValue);
- XMLWriter.WriteEndElement();
- Else
- WriteXMLItem(XMLWriter, CurrentKey, CurrentValue);
- EndIf;
-
- EndDo;
-
- XMLWriter.WriteEndElement(); // entry
-
-EndProcedure
-
-Function ReadFeedAtom(XMLReader)
-
- Feed = New Structure;
- Items = New Array;
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- ElementName = XMLReader.Name;
-
- If ElementName = "entry" Then
- Element = ReadItemAtom(XMLReader);
- Items.Add(Element);
- ElsIf ElementName = "link" Then
- Feed.Insert("link", XMLReader.GetAttribute("href"));
- Else
- XMLReader.Read();
- If XMLReader.NodeType = XMLNodeType.Text Then
- Feed.Insert(ElementName, XMLReader.Value);
- EndIf;
- EndIf;
-
- ElsIf XMLReader.NodeType = XMLNodeType.EndElement And XMLReader.Name = "feed" Then
- Break;
- EndIf;
-
- EndDo;
-
- Feed.Insert("entries", Items);
-
- Return Feed;
-
-EndFunction
-
-Function ReadItemAtom(XMLReader)
-
- Element = New Structure;
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement Then
-
- ElementName = XMLReader.Name;
-
- If ElementName = "link" Then
- Element.Insert("link" , XMLReader.GetAttribute("href"));
- ElsIf ElementName = "author" Then
- AuthorName = ReadAuthorAtom(XMLReader);
- Element.Insert("author", AuthorName);
- Else
- XMLReader.Read();
- If XMLReader.NodeType = XMLNodeType.Text Then
- Element.Insert(ElementName, XMLReader.Value);
- EndIf;
- EndIf;
-
- ElsIf XMLReader.NodeType = XMLNodeType.EndElement And XMLReader.Name = "entry" Then
- Break;
- EndIf;
-
- EndDo;
-
- Return Element;
-
-EndFunction
-
-Function ReadAuthorAtom(XMLReader)
-
- AuthorName = "";
-
- While XMLReader.Read() Do
-
- If XMLReader.NodeType = XMLNodeType.StartElement And XMLReader.Name = "name" Then
- XMLReader.Read();
- If XMLReader.NodeType = XMLNodeType.Text Then
- AuthorName = XMLReader.Value;
- EndIf;
- ElsIf XMLReader.NodeType = XMLNodeType.EndElement And XMLReader.Name = "author" Then
- Break;
- EndIf;
-
- EndDo;
-
- Return AuthorName;
-
-EndFunction
-
-#EndRegion
-
-#Region Alternate
-
-Function СоздатьФидRSS(Val НазваниеКанала, Val ОписаниеКанала, Val СсылкаКанала, Val Элементы, Val ДатаОбновления = Undefined) Export
- Return CreateFeedRSS(НазваниеКанала, ОписаниеКанала, СсылкаКанала, Элементы, ДатаОбновления);
-EndFunction
-
-Function ПолучитьСтруктуруЭлементаФидаRSS(Val Пустая = False, Val КакСоответствие = False) Export
- Return GetFeedItemStructureRSS(Пустая, КакСоответствие);
-EndFunction
-
-Function РазобратьФидRSS(Val ТекстXML) Export
- Return ParseFeedRSS(ТекстXML);
-EndFunction
-
-Function СоздатьФидAtom(Val НазваниеФида, Val СсылкаФида, Val IDФида, Val Элементы, Val ДатаОбновления = Undefined) Export
- Return CreateFeedAtom(НазваниеФида, СсылкаФида, IDФида, Элементы, ДатаОбновления);
-EndFunction
-
-Function ПолучитьСтруктуруЭлементаФидаAtom(Val Пустая = False, Val КакСоответствие = False) Export
- Return GetFeedItemStructureAtom(Пустая, КакСоответствие);
-EndFunction
-
-Function РазобратьФидAtom(Val ТекстXML) Export
- Return ParseFeedAtom(ТекстXML);
-EndFunction
-
-#EndRegion
\ No newline at end of file
diff --git a/src/ru/OInt/api/metrika/Modules/OPI_RSS.os b/src/ru/OInt/api/metrika/Modules/OPI_RSS.os
deleted file mode 100644
index 594ea7a221..0000000000
--- a/src/ru/OInt/api/metrika/Modules/OPI_RSS.os
+++ /dev/null
@@ -1,581 +0,0 @@
-// OneScript: ./OInt/api/metrika/Modules/OPI_RSS.os
-// Lib: RSS
-// CLI: rss
-// Keywords: rss, atom, feed
-
-// DocsCategory: Other
-// DocsNameRU: RSS/Atom
-// DocsNameEN: RSS/Atom
-
-// MIT License
-
-// Copyright (c) 2023-2026 Anton Tsitavets
-
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-// SOFTWARE.
-
-// https://github.com/Bayselonarrend/OpenIntegrations
-
-// BSLLS:Typo-off
-// BSLLS:LatinAndCyrillicSymbolInWord-off
-// BSLLS:IncorrectLineBreak-off
-// BSLLS:NumberOfOptionalParams-off
-// BSLLS:UsingServiceTag-off
-// BSLLS:LineLength-off
-// BSLLS:UsingSynchronousCalls-off
-
-//@skip-check module-structure-top-region
-//@skip-check module-structure-method-in-regions
-//@skip-check wrong-string-literal-content
-//@skip-check method-too-many-params
-
-#Использовать "../../../tools/main"
-#Использовать "../../../tools/http"
-
-#Область ПрограммныйИнтерфейс
-
-#Область МетодыRSS
-
-// Создать фид (RSS)
-// Создает текст RSS фида
-//
-// Параметры:
-// НазваниеКанала - Строка - Название канала - name
-// ОписаниеКанала - Строка - Описание канала - descr
-// СсылкаКанала - Строка - Ссылка канала - link
-// Элементы - Массив Из Структура - Элементы фида. См. ПолучитьСтруктуруЭлементаФидаRSS - items
-// ДатаОбновления - Дата, Неопределено - Дата обновления. Текущая, если не заполнено - date
-//
-// Возвращаемое значение:
-// Строка - XML фид канала
-Функция СоздатьФидRSS(Знач НазваниеКанала
- , Знач ОписаниеКанала
- , Знач СсылкаКанала
- , Знач Элементы
- , Знач ДатаОбновления = Неопределено) Экспорт
-
- ДатаОбновления = ?(ДатаОбновления = Неопределено
- , OPI_Инструменты.ПолучитьТекущуюДату()
- , ДатаОбновления);
-
- OPI_ПреобразованиеТипов.ПолучитьСтроку(НазваниеКанала);
- OPI_ПреобразованиеТипов.ПолучитьСтроку(ОписаниеКанала);
- OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаКанала);
- OPI_ПреобразованиеТипов.ПолучитьМассив(Элементы);
- OPI_ПреобразованиеТипов.ПолучитьДату(ДатаОбновления);
-
- ЗаписьXML = Новый ЗаписьXML;
- ЗаписьXML.УстановитьСтроку("UTF-8");
-
- ЗаписьXML.ЗаписатьОбъявлениеXML();
- ЗаписьXML.ЗаписатьНачалоЭлемента("rss");
- ЗаписьXML.ЗаписатьАтрибут("version", "2.0");
-
- ЗаписьXML.ЗаписатьНачалоЭлемента("channel");
- ЗаписатьЭлементXML(ЗаписьXML, "title" , НазваниеКанала);
- ЗаписатьЭлементXML(ЗаписьXML, "link" , СсылкаКанала);
- ЗаписатьЭлементXML(ЗаписьXML, "description", ОписаниеКанала);
-
- ДатаRFC822 = OPI_Инструменты.ДатаRFC822(ДатаОбновления);
- ЗаписатьЭлементXML(ЗаписьXML, "lastBuildDate", ДатаRFC822);
-
- Для Каждого Элемент Из Элементы Цикл
- ЗаписатьЭлементФида(ЗаписьXML, Элемент);
- КонецЦикла;
-
- ЗаписьXML.ЗаписатьКонецЭлемента();
- ЗаписьXML.ЗаписатьКонецЭлемента();
-
- Фид = ЗаписьXML.Закрыть();
-
- Возврат Фид;
-
-КонецФункции
-
-// Получить структуру элемента фида (RSS)
-// Получает структуру параметров элемента RSS фида
-//
-// Параметры:
-// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
-// КакСоответствие - Булево - Истина > возвращает поля как соответствие - map
-//
-// Возвращаемое значение:
-// Структура Из КлючИЗначение - Структура полей элемента фида
-Функция ПолучитьСтруктуруЭлементаФидаRSS(Знач Пустая = Ложь, Знач КакСоответствие = Ложь) Экспорт
-
- OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
- OPI_ПреобразованиеТипов.ПолучитьБулево(КакСоответствие);
-
- Если КакСоответствие Тогда
- СтруктураЭлемента = Новый Соответствие;
- Иначе
- СтруктураЭлемента = Новый Структура;
- КонецЕсли;
-
- СтруктураЭлемента.Вставить("title" , "<заголовок элемента>");
- СтруктураЭлемента.Вставить("description" , "<описание/содержимое элемента>");
- СтруктураЭлемента.Вставить("link" , "");
- СтруктураЭлемента.Вставить("pubDate" , "<дата публикации>");
- СтруктураЭлемента.Вставить("author" , "");
- СтруктураЭлемента.Вставить("guid" , "<уникальный идентификатор элемента>");
-
- Если Пустая Тогда
- СтруктураЭлемента = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураЭлемента);
- КонецЕсли;
-
- //@skip-check constructor-function-return-section
- Возврат СтруктураЭлемента;
-
-КонецФункции
-
-// Разобрать фид (RSS)
-// Разбирает XML RSS фида и возвращает структуру с данными канала и элементами
-//
-// Параметры:
-// ТекстXML - Строка - XML содержимое RSS фида - xml
-//
-// Возвращаемое значение:
-// Структура Из КлючИЗначение - Структура канала
-Функция РазобратьФидRSS(Знач ТекстXML) Экспорт
-
- OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстXML);
-
- Канал = Новый Структура;
-
- ЧтениеXML = Новый ЧтениеXML;
- ЧтениеXML.УстановитьСтроку(ТекстXML);
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- Если ЧтениеXML.Имя = "channel" Тогда
- Канал = ПрочитатьКаналRSS(ЧтениеXML);
- Прервать;
- КонецЕсли;
-
- КонецЕсли;
-
- КонецЦикла;
-
- ЧтениеXML.Закрыть();
-
- Возврат Канал;
-
-КонецФункции
-
-#КонецОбласти
-
-#Область МетодыAtom
-
-// Создать фид (Atom)
-// Создает текст Atom фида
-//
-// Параметры:
-// НазваниеФида - Строка - Название фида - name
-// СсылкаФида - Строка - URL фида - link
-// IDФида - Строка - Уникальный идентификатор фида (обычно URL) - id
-// Элементы - Массив Из Структура - Элементы фида. См. ПолучитьСтруктуруЭлементаФидаAtom - items
-// ДатаОбновления - Дата, Неопределено - Дата обновления. Текущая, если не заполнено - date
-//
-// Возвращаемое значение:
-// Строка - XML фид Atom
-Функция СоздатьФидAtom(Знач НазваниеФида
- , Знач СсылкаФида
- , Знач IDФида
- , Знач Элементы
- , Знач ДатаОбновления = Неопределено) Экспорт
-
- ДатаОбновления = ?(ДатаОбновления = Неопределено
- , OPI_Инструменты.ПолучитьТекущуюДату()
- , ДатаОбновления);
-
- OPI_ПреобразованиеТипов.ПолучитьСтроку(НазваниеФида);
- OPI_ПреобразованиеТипов.ПолучитьСтроку(СсылкаФида);
- OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФида);
- OPI_ПреобразованиеТипов.ПолучитьМассив(Элементы);
- OPI_ПреобразованиеТипов.ПолучитьДату(ДатаОбновления);
-
- ЗаписьXML = Новый ЗаписьXML;
- ЗаписьXML.УстановитьСтроку("UTF-8");
-
- ЗаписьXML.ЗаписатьОбъявлениеXML();
- ЗаписьXML.ЗаписатьНачалоЭлемента("feed");
- ЗаписьXML.ЗаписатьАтрибут("xmlns", "http://www.w3.org/2005/Atom");
-
- ЗаписатьЭлементXML(ЗаписьXML, "title", НазваниеФида);
- ЗаписатьЭлементXML(ЗаписьXML, "id" , IDФида);
-
- ЗаписьXML.ЗаписатьНачалоЭлемента("link");
- ЗаписьXML.ЗаписатьАтрибут("href", СсылкаФида);
- ЗаписьXML.ЗаписатьАтрибут("rel" , "alternate");
- ЗаписьXML.ЗаписатьКонецЭлемента();
-
- ДатаISO8601 = OPI_Инструменты.ДатаISO8601(ДатаОбновления);
- ЗаписатьЭлементXML(ЗаписьXML, "updated", ДатаISO8601);
-
- Для Каждого Элемент Из Элементы Цикл
- ЗаписатьЭлементФидаAtom(ЗаписьXML, Элемент);
- КонецЦикла;
-
- ЗаписьXML.ЗаписатьКонецЭлемента(); // feed
-
- Фид = ЗаписьXML.Закрыть();
-
- Возврат Фид;
-
-КонецФункции
-
-// Получить структуру элемента фида (Atom)
-// Получает структуру параметров элемента Atom фида
-//
-// Параметры:
-// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
-// КакСоответствие - Булево - Истина > возвращает поля как соответствие - map
-//
-// Возвращаемое значение:
-// Структура Из КлючИЗначение - Структура полей элемента фида
-Функция ПолучитьСтруктуруЭлементаФидаAtom(Знач Пустая = Ложь, Знач КакСоответствие = Ложь) Экспорт
-
- OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
- OPI_ПреобразованиеТипов.ПолучитьБулево(КакСоответствие);
-
- Если КакСоответствие Тогда
- СтруктураЭлемента = Новый Соответствие;
- Иначе
- СтруктураЭлемента = Новый Структура;
- КонецЕсли;
-
- СтруктураЭлемента.Вставить("title" , "<заголовок элемента>");
- СтруктураЭлемента.Вставить("id" , "<уникальный идентификатор элемента>");
- СтруктураЭлемента.Вставить("link" , "");
- СтруктураЭлемента.Вставить("updated" , "<дата обновления>");
- СтруктураЭлемента.Вставить("summary" , "<краткое описание>");
- СтруктураЭлемента.Вставить("content" , "<полное содержимое>");
- СтруктураЭлемента.Вставить("author" , "<имя автора>");
- СтруктураЭлемента.Вставить("published" , "<дата публикации>");
-
- Если Пустая Тогда
- СтруктураЭлемента = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураЭлемента);
- КонецЕсли;
-
- //@skip-check constructor-function-return-section
- Возврат СтруктураЭлемента;
-
-КонецФункции
-
-// Разобрать фид (Atom)
-// Разбирает XML Atom фида и возвращает структуру с данными фида и элементами
-//
-// Параметры:
-// ТекстXML - Строка - XML содержимое Atom фида - xml
-//
-// Возвращаемое значение:
-// Структура Из КлючИЗначение - Структура фида
-Функция РазобратьФидAtom(Знач ТекстXML) Экспорт
-
- OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекстXML);
-
- Фид = Новый Структура;
-
- ЧтениеXML = Новый ЧтениеXML;
- ЧтениеXML.УстановитьСтроку(ТекстXML);
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- Если ЧтениеXML.Имя = "feed" Тогда
- Фид = ПрочитатьФидAtom(ЧтениеXML);
- Прервать;
- КонецЕсли;
-
- КонецЕсли;
-
- КонецЦикла;
-
- ЧтениеXML.Закрыть();
-
- Возврат Фид;
-
-КонецФункции
-
-#КонецОбласти
-
-#КонецОбласти
-
-#Область СлужебныеПроцедурыИФункции
-
-Процедура ЗаписатьЭлементXML(ЗаписьXML, ИмяЭлемента, Значение)
-
- Если ЗначениеЗаполнено(Значение) Тогда
- ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента);
- ЗаписьXML.ЗаписатьТекст(Значение);
- ЗаписьXML.ЗаписатьКонецЭлемента();
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ЗаписатьЭлементФида(ЗаписьXML, Элемент)
-
- OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Элемент);
-
- ЗаписьXML.ЗаписатьНачалоЭлемента("item");
-
- Для Каждого ПолеДанных Из Элемент Цикл
-
- ТекущийКлюч = ПолеДанных.Ключ;
- ТекущееЗначение = ПолеДанных.Значение;
-
- Если ТипЗнч(ТекущееЗначение) = Тип("Дата") Тогда
- ТекущееЗначение = OPI_Инструменты.ДатаRFC822(ТекущееЗначение);
- Иначе
- OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееЗначение, Ложь);
- КонецЕсли;
-
- Если ТекущийКлюч = "guid" Тогда
- ЗаписьXML.ЗаписатьНачалоЭлемента("guid");
- ЗаписьXML.ЗаписатьАтрибут("isPermaLink", "false");
- ЗаписьXML.ЗаписатьТекст(ТекущееЗначение);
- ЗаписьXML.ЗаписатьКонецЭлемента();
- Иначе
- ЗаписатьЭлементXML(ЗаписьXML, ТекущийКлюч, ТекущееЗначение);
- КонецЕсли;
-
- КонецЦикла;
-
- ЗаписьXML.ЗаписатьКонецЭлемента();
-
-КонецПроцедуры
-
-Функция ПрочитатьКаналRSS(ЧтениеXML)
-
- Канал = Новый Структура;
- Элементы = Новый Массив;
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- ИмяЭлемента = ЧтениеXML.Имя;
-
- Если ИмяЭлемента = "item" Тогда
- Элемент = ПрочитатьЭлементRSS(ЧтениеXML);
- Элементы.Добавить(Элемент);
- Иначе
- ЧтениеXML.Прочитать();
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
- Канал.Вставить(ИмяЭлемента, ЧтениеXML.Значение);
- КонецЕсли;
- КонецЕсли;
-
- ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "channel" Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Канал.Вставить("items", Элементы);
-
- Возврат Канал;
-
-КонецФункции
-
-Функция ПрочитатьЭлементRSS(ЧтениеXML)
-
- Элемент = Новый Структура;
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- ИмяЭлемента = ЧтениеXML.Имя;
- ЧтениеXML.Прочитать();
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
- Элемент.Вставить(ИмяЭлемента, ЧтениеXML.Значение);
- КонецЕсли;
-
- ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "item" Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Возврат Элемент;
-
-КонецФункции
-
-Процедура ЗаписатьЭлементФидаAtom(ЗаписьXML, Элемент)
-
- OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Элемент);
-
- ЗаписьXML.ЗаписатьНачалоЭлемента("entry");
-
- Для Каждого ПолеДанных Из Элемент Цикл
-
- ТекущийКлюч = ПолеДанных.Ключ;
- ТекущееЗначение = ПолеДанных.Значение;
-
- Если ТипЗнч(ТекущееЗначение) = Тип("Дата") Тогда
- ТекущееЗначение = OPI_Инструменты.ДатаISO8601(ТекущееЗначение);
- Иначе
- OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееЗначение, Ложь);
- КонецЕсли;
-
- Если ТекущийКлюч = "link" Тогда
- ЗаписьXML.ЗаписатьНачалоЭлемента("link");
- ЗаписьXML.ЗаписатьАтрибут("href", ТекущееЗначение);
- ЗаписьXML.ЗаписатьАтрибут("rel" , "alternate");
- ЗаписьXML.ЗаписатьКонецЭлемента();
- ИначеЕсли ТекущийКлюч = "author" Тогда
- ЗаписьXML.ЗаписатьНачалоЭлемента("author");
- ЗаписатьЭлементXML(ЗаписьXML, "name" , ТекущееЗначение);
- ЗаписьXML.ЗаписатьКонецЭлемента();
- ИначеЕсли ТекущийКлюч = "content" Тогда
- ЗаписьXML.ЗаписатьНачалоЭлемента("content");
- ЗаписьXML.ЗаписатьАтрибут("type", "html");
- ЗаписьXML.ЗаписатьТекст(ТекущееЗначение);
- ЗаписьXML.ЗаписатьКонецЭлемента();
- Иначе
- ЗаписатьЭлементXML(ЗаписьXML, ТекущийКлюч, ТекущееЗначение);
- КонецЕсли;
-
- КонецЦикла;
-
- ЗаписьXML.ЗаписатьКонецЭлемента(); // entry
-
-КонецПроцедуры
-
-Функция ПрочитатьФидAtom(ЧтениеXML)
-
- Фид = Новый Структура;
- Элементы = Новый Массив;
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- ИмяЭлемента = ЧтениеXML.Имя;
-
- Если ИмяЭлемента = "entry" Тогда
- Элемент = ПрочитатьЭлементAtom(ЧтениеXML);
- Элементы.Добавить(Элемент);
- ИначеЕсли ИмяЭлемента = "link" Тогда
- Фид.Вставить("link", ЧтениеXML.ПолучитьАтрибут("href"));
- Иначе
- ЧтениеXML.Прочитать();
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
- Фид.Вставить(ИмяЭлемента, ЧтениеXML.Значение);
- КонецЕсли;
- КонецЕсли;
-
- ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "feed" Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Фид.Вставить("entries", Элементы);
-
- Возврат Фид;
-
-КонецФункции
-
-Функция ПрочитатьЭлементAtom(ЧтениеXML)
-
- Элемент = Новый Структура;
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
-
- ИмяЭлемента = ЧтениеXML.Имя;
-
- Если ИмяЭлемента = "link" Тогда
- Элемент.Вставить("link" , ЧтениеXML.ПолучитьАтрибут("href"));
- ИначеЕсли ИмяЭлемента = "author" Тогда
- ИмяАвтора = ПрочитатьАвтораAtom(ЧтениеXML);
- Элемент.Вставить("author", ИмяАвтора);
- Иначе
- ЧтениеXML.Прочитать();
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
- Элемент.Вставить(ИмяЭлемента, ЧтениеXML.Значение);
- КонецЕсли;
- КонецЕсли;
-
- ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "entry" Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Возврат Элемент;
-
-КонецФункции
-
-Функция ПрочитатьАвтораAtom(ЧтениеXML)
-
- ИмяАвтора = "";
-
- Пока ЧтениеXML.Прочитать() Цикл
-
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "name" Тогда
- ЧтениеXML.Прочитать();
- Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
- ИмяАвтора = ЧтениеXML.Значение;
- КонецЕсли;
- ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "author" Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Возврат ИмяАвтора;
-
-КонецФункции
-
-#КонецОбласти
-
-#Region Alternate
-
-Function CreateFeedRSS(Val ChannelTitle, Val ChannelDescription, Val ChannelLink, Val Items, Val UpdateDate = Undefined) Export
- Return СоздатьФидRSS(ChannelTitle, ChannelDescription, ChannelLink, Items, UpdateDate);
-EndFunction
-
-Function GetFeedItemStructureRSS(Val Clear = False, Val AsMap = False) Export
- Return ПолучитьСтруктуруЭлементаФидаRSS(Clear, AsMap);
-EndFunction
-
-Function ParseFeedRSS(Val XMLText) Export
- Return РазобратьФидRSS(XMLText);
-EndFunction
-
-Function CreateFeedAtom(Val FeedTitle, Val FeedLink, Val FeedID, Val Items, Val UpdateDate = Undefined) Export
- Return СоздатьФидAtom(FeedTitle, FeedLink, FeedID, Items, UpdateDate);
-EndFunction
-
-Function GetFeedItemStructureAtom(Val Clear = False, Val AsMap = False) Export
- Return ПолучитьСтруктуруЭлементаФидаAtom(Clear, AsMap);
-EndFunction
-
-Function ParseFeedAtom(Val XMLText) Export
- Return РазобратьФидAtom(XMLText);
-EndFunction
-
-#EndRegion
\ No newline at end of file
diff --git a/src/ru/OPI/src/CommonModules/OPI_RSS/Module.bsl b/src/ru/OPI/src/CommonModules/OPI_RSS/Module.bsl
index b486cd1423..00028a3bfa 100644
--- a/src/ru/OPI/src/CommonModules/OPI_RSS/Module.bsl
+++ b/src/ru/OPI/src/CommonModules/OPI_RSS/Module.bsl
@@ -1,4 +1,4 @@
-// OneScript: ./OInt/api/metrika/Modules/OPI_RSS.os
+// OneScript: ./OInt/api/rss/Modules/OPI_RSS.os
// Lib: RSS
// CLI: rss
// Keywords: rss, atom, feed