예제 #1
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="document">XML document.</param>
        /// <param name="originalLink">Original link.</param>
        public PodcastChannel(XDocument document, string originalLink = null)
        {
            if (document?.Root == null)
            {
                throw new ArgumentNullException(nameof(document));
            }
            var channel = document.Root.Element("channel");

            if (channel == null)
            {
                throw new ArgumentException("Invalid RSS XML");
            }
            if (originalLink != null)
            {
                ChannelUri = originalLink;
            }
            else
            {
                var atomLink = channel.Elements(Consts.Namespaces.Atom + "link").FirstOrDefault(e => "self".Equals(e.Attribute("rel")?.Value, StringComparison.OrdinalIgnoreCase) && e.Attribute("href") != null);
                if (atomLink != null)
                {
                    ChannelUri = atomLink.Attribute("href")?.Value;
                }
            }
            Link          = channel.Element("link")?.Value;
            Description   = channel.Element("description")?.Value;
            Copyright     = channel.Element("copyright")?.Value;
            LastBuildDate = RssValuesHelper.ConvertDateTime(channel.Element("lastBuildDate")?.Value);
            PubDate       = RssValuesHelper.ConvertDateTime(channel.Element("pubDate")?.Value);
            Category      = channel.Element(Consts.Namespaces.Itunes + "category")?.Attribute("text")?.Value ?? channel.Element("category")?.Value;
            Author        = channel.Element(Consts.Namespaces.Itunes + "author")?.Value;
            Summary       = channel.Element(Consts.Namespaces.Itunes + "summary")?.Value;
            Subtitle      = channel.Element(Consts.Namespaces.Itunes + "subtitle")?.Value;
            Onwer         = new Owner(channel.Element(Consts.Namespaces.Itunes + "owner"));
            var imageElement = channel.Element("image");

            ChannelImage = imageElement != null ? new ChannelImageObj(imageElement) : new ChannelImageObj(channel.Element(Consts.Namespaces.Itunes + "image")?.Attribute("href")?.Value);
            Keywords     =
                (channel.Element(Consts.Namespaces.Itunes + "keywords")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k))
                .Concat((channel.Element(Consts.Namespaces.Itunes + "keyword")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k)))
                .Distinct(StringComparer.OrdinalIgnoreCase)
                .ToList();
            var itemElements = channel.Elements("item").ToArray();

            Episodes = new List <IPodcastEpisode>();
            for (int i = 0; i < itemElements.Length; i++)
            {
                Episodes.Add(new Episode(i, itemElements[i]));
            }
        }
예제 #2
0
 public Episode(int order, XElement document)
 {
     Order = order;
     if (document != null)
     {
         PubDate         = RssValuesHelper.ConvertDateTime(document.Element("pubDate")?.Value);
         Title           = document.Element("title")?.Value;
         Link            = document.Element("link")?.Value;
         Guid            = document.Element("guid")?.Value;
         DescriptionHtml = document.Element("description")?.Value;
         Category        = document.Elements("category").Select(e => e.Value).ToList();
         Author          = document.Element(Consts.Namespaces.Itunes + "author")?.Value;
         Subtitle        = document.Element(Consts.Namespaces.Itunes + "subtitle")?.Value;
         Summary         = document.Element(Consts.Namespaces.Itunes + "summary")?.Value;
         Duration        = RssValuesHelper.ConvertDuration(document.Element(Consts.Namespaces.Itunes + "duration")?.Value);
         Keywords        = (document.Element(Consts.Namespaces.Itunes + "keywords")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k))
                           .Concat((document.Element(Consts.Namespaces.Itunes + "keyword")?.Value ?? "").Split(',').Select(k => k.Trim()).Where(k => !string.IsNullOrWhiteSpace(k)))
                           .Distinct(StringComparer.OrdinalIgnoreCase)
                           .ToList();
         ImageUrl  = document.Element(Consts.Namespaces.Itunes + "image")?.Attribute("href")?.Value;
         Enclosure = new EnclosureObj(document.Element("enclosure"));
     }
 }