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