예제 #1
0
 /// <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;
                 }
             });
         }
     }
 }
예제 #2
0
        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);
        }