Esempio n. 1
0
        private static DateTimeOffset GetDate(CodeHollow.FeedReader.FeedItem item)
        {
            if (item.SpecificItem is AtomFeedItem feedItem)
            {
                if (!string.IsNullOrWhiteSpace(feedItem.UpdatedDateString))
                {
                    return(ParseDate(feedItem.UpdatedDateString));
                }
            }
            if (!string.IsNullOrEmpty(item.PublishingDateString))
            {
                return(ParseDate(item.PublishingDateString));
            }
            if (item.SpecificItem is Rss20FeedItem rss20FeedItem)
            {
                if (!string.IsNullOrWhiteSpace(rss20FeedItem.DC.DateString))
                {
                    return(ParseDate(rss20FeedItem.DC.DateString));
                }
            }
            if (TryExtractDateFromUrl(item.Link, out var date))
            {
                return(date);
            }

            return(default);
Esempio n. 2
0
        private string GetImageUrl(CodeHollow.FeedReader.FeedItem item)
        {
            if (item.SpecificItem is MediaRssFeedItem feedItem)
            {
                if (feedItem.Enclosure.MediaType?.StartsWith("image") == true)
                {
                    return(feedItem.Enclosure.Url);
                }
                return(feedItem.Media.FirstOrDefault()?.Url);
            }
            if (item.SpecificItem is AtomFeedItem atomFeedItem)
            {
                return(atomFeedItem.Links.FirstOrDefault(x => x.LinkType?.StartsWith("image") == true)?.Href);
            }
            if (item.SpecificItem is Rss20FeedItem rss20FeedItem)
            {
                if (rss20FeedItem.Enclosure.MediaType?.StartsWith("image") == true)
                {
                    return(rss20FeedItem.Enclosure.Url);
                }
                if (rss20FeedItem.Description?.Contains("<img") == true)
                {
                    return(rss20FeedItem.Description
                           .Pipe(_htmlParser.ExtractFirstImageUrl)
                           .Pipe(WebUtility.HtmlDecode));
                }
            }

            return(null);
        }
Esempio n. 3
0
 private static string GetSummary(CodeHollow.FeedReader.FeedItem syndicationItem)
 {
     if (!string.IsNullOrEmpty(syndicationItem.Description))
     {
         return(syndicationItem.Description);
     }
     return(null);
 }
Esempio n. 4
0
 private FeedItem ConvertToRssItem(CodeHollow.FeedReader.FeedItem syndicationItem)
 {
     return(new FeedItem {
         Id = syndicationItem.Id,
         Title = WebUtility.HtmlDecode(syndicationItem.Title),
         Link = syndicationItem.Link,
         PublishDate = GetDate(syndicationItem),
         ImageUrl = syndicationItem
                    .Pipe(GetImageUrl)
                    .Pipe(UrlSanitizer.Sanitize),
         Summary = syndicationItem
                   .Pipe(GetSummary)
                   .Pipe(WebUtility.HtmlDecode)
                   .Pipe(HtmlToPlainText)
                   .Pipe(ClearConsecutiveSpaces)
     });
 }