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);
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); }
private static string GetSummary(CodeHollow.FeedReader.FeedItem syndicationItem) { if (!string.IsNullOrEmpty(syndicationItem.Description)) { return(syndicationItem.Description); } return(null); }
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) }); }