/// <summary> /// Actualiza los feed Rss de los banners siguientes /// </summary> private void UpdateRssSources() { foreach (Banner banner in iNextBanners) { if (banner.Source is RssSource) { var source = (RssSource)banner.Source; Task.Run(() => { try { IRssReader mRssReader = new RawXmlRssReader(); Uri uri; Uri.TryCreate(source.Url, UriKind.Absolute, out uri); var newRssItems = mRssReader.Read(uri).ToList(); if (newRssItems != null && newRssItems.Count > 0) { source.RssItems = AutoMapper.Mapper.Map <IList <RssItemDTO>, IList <RssItem> >(newRssItems); } } catch (Exception) { log.DebugFormat("Error al actualizar los feeds del banner {0}", banner.Id); return; } }); } } }
public override IEnumerable <RssItemDTO> Read(Uri pUrl) { if (pUrl == null) { throw new ArgumentNullException("pUrl"); } // Se recupera el XML desde la URL, y se parsea el mismo para obtener los diferentes ítems. El modelo de XML // utilizado es el siguiente (http://www.w3schools.com/xml/xml_rss.asp): //<?xml version="1.0" encoding="UTF-8"?> //<rss version = "2.0"> // <channel> // <title> W3Schools Home Page</title> // <link> http://www.w3schools.com</link> // <description> Free web building tutorials </description> // <item> // <title>RSS Tutorial</title> // <link>http://www.w3schools.com/xml/xml_rss.asp</link> // <description> New RSS tutorial on W3Schools</ description > // </item> // <item> // <title>XML Tutorial</title> // <link>http://www.w3schools.com/xml</link> // <description> New XML tutorial on W3Schools</description> // </item> // </channel> //</rss> XmlTextReader mXmlReader = new XmlTextReader(pUrl.AbsoluteUri); XmlDocument mRssXmlDocument = new XmlDocument(); log.Info("Obteniendo feeds..."); log.DebugFormat("Obteniendo feeds desde {0}...", pUrl.AbsoluteUri); mRssXmlDocument.Load(mXmlReader); log.Info("Ha finalizado la obtención de feeds."); //log.Debug(pLogger => pLogger("Se ha obtenido el siguiente XML: {0}", mRssXmlDocument.OuterXml)); IList <RssItemDTO> mRssItems = new List <RssItemDTO>(); log.Info("Adaptando feeds..."); foreach (XmlNode bRssXmlItem in mRssXmlDocument.SelectNodes("//channel/item")) { mRssItems.Add(new RssItemDTO { Title = RawXmlRssReader.GetXmlNodeValue <String>(bRssXmlItem, "title"), Description = RawXmlRssReader.GetXmlNodeValue <String>(bRssXmlItem, "description"), Url = RawXmlRssReader.GetXmlNodeValue <String>(bRssXmlItem, "link"), PublishingDate = RawXmlRssReader.GetXmlNodeValue <DateTime?>(bRssXmlItem, "pubDate") }); } log.Info("Devolviendo feeds adaptados..."); return(mRssItems); }