private async Task addChannelIdentityAsync(RssFeedWriter rssFeedWriter) { await rssFeedWriter.WriteDescription(_feedChannel.FeedDescription.ApplyRle().RemoveHexadecimalSymbols()); await rssFeedWriter.WriteCopyright(_feedChannel.FeedCopyright.ApplyRle().RemoveHexadecimalSymbols()); await rssFeedWriter.WriteTitle(_feedChannel.FeedTitle.ApplyRle().RemoveHexadecimalSymbols()); await rssFeedWriter.WriteLanguage(new CultureInfo(_feedChannel.CultureName)); await rssFeedWriter.WriteRaw($"<atom:link href=\"{_httpContextInfo.GetRawUrl()}\" rel=\"self\" type=\"application/rss+xml\" />"); await rssFeedWriter.Write(new SyndicationLink(_httpContextInfo.GetBaseUri(), relationshipType : RssElementNames.Link)); }
private async Task WriteFeedPreamble(RssFeedWriter feedWriter) { await feedWriter.WriteCopyright("DR"); await feedWriter.WriteGenerator("Podnanza"); await feedWriter.Write(GetOwner()); await feedWriter.Write(GetLogo()); await feedWriter.Write(GetCategory()); await feedWriter.WriteLanguage(_daCulture); await feedWriter.Write(new SyndicationContent("language", _itunesNs, $"{_daCulture}")); await feedWriter.Write(new SyndicationContent("explicit", _itunesNs, "no")); await feedWriter.Write(new SyndicationContent("complete", _itunesNs, "Yes")); await feedWriter.Write(new SyndicationContent("type", _itunesNs, "serial")); }
private async Task <string> BuildRSSFeedInternal(RSSFeedOptions rssOptions) { var sb = new StringBuilder(); using (var _ = new StringWriter(sb)) using (XmlWriter xmlWriter = XmlWriter.Create(_, new XmlWriterSettings { Async = true, Indent = true })) { //Since the XmlWriter doesn't care about actually setting UTF-8, let's just do it manually await xmlWriter.WriteProcessingInstructionAsync("xml", @"version=""1.0"" encoding=""UTF-8"""); var syndicationFeedWriter = new RssFeedWriter(xmlWriter); await syndicationFeedWriter.WriteTitle(rssOptions.Title).ConfigureAwait(false); if (!string.IsNullOrEmpty(rssOptions.Description)) { await syndicationFeedWriter.WriteDescription(rssOptions.Description).ConfigureAwait(false); } if (rssOptions.Url != null) { await syndicationFeedWriter.Write(new SyndicationLink(rssOptions.Url)).ConfigureAwait(false); if (rssOptions.ImageUrl != null) { await syndicationFeedWriter.Write(new SyndicationImage(rssOptions.ImageUrl) { Title = rssOptions.Title, Link = new SyndicationLink(rssOptions.Url) }).ConfigureAwait(false); } } //Choose the current culture if no language has been chosen await syndicationFeedWriter.WriteLanguage(rssOptions.Language ?? CultureInfo.CurrentCulture).ConfigureAwait(false); if (!string.IsNullOrEmpty(rssOptions.ManagingEditor)) { await syndicationFeedWriter.Write(new SyndicationPerson(null, rssOptions.ManagingEditor, RssContributorTypes.ManagingEditor)).ConfigureAwait(false); } //Do we even still care about Webmaster? if (!string.IsNullOrEmpty(rssOptions.Webmaster)) { await syndicationFeedWriter.WriteValue("webMaster", rssOptions.Webmaster).ConfigureAwait(false); } if (!string.IsNullOrEmpty(rssOptions.Copyright)) { await syndicationFeedWriter.WriteCopyright(rssOptions.Copyright).ConfigureAwait(false); } var syndicationItems = await _rssProvider.RetrieveSyndicationItems().ConfigureAwait(false); //Use the latest LastUpdated item in the list to determine the last build date. await syndicationFeedWriter.WriteLastBuildDate(syndicationItems.Max(x => x.LastUpdated)).ConfigureAwait(false); foreach (var __ in syndicationItems) { await syndicationFeedWriter.Write(__.ToSyndicationItem()).ConfigureAwait(false); } await xmlWriter.FlushAsync().ConfigureAwait(false); } return(sb.ToString()); }
public async Task <IActionResult> Export() { var project = await _projectResolver.GetCurrentProjectSettings(CancellationToken.None); var articles = await _blogService.GetPosts(true); var baseUrl = string.Concat(HttpContext.Request.Scheme, "://", HttpContext.Request.Host.ToUriComponent()); var feedUrl = baseUrl + "api/rss"; var sb = new StringBuilder(); using (XmlWriter xmlWriter = XmlWriter.Create(sb, new XmlWriterSettings() { Async = true, Indent = true })) { var writer = new RssFeedWriter(xmlWriter); await writer.WriteTitle(project.Title); await writer.WriteDescription(".NET Foundation Blog"); if (!string.IsNullOrEmpty(project.LanguageCode)) { await writer.WriteLanguage(new CultureInfo(project.LanguageCode)); } foreach (var a in articles) { var postUrl = await _blogService.ResolvePostUrl(a); var item = new SyndicationItem() { Title = a.Title, Description = a.Content, Id = baseUrl + postUrl, Published = a.PubDate, LastUpdated = a.LastModified }; foreach (var c in a.Categories) { item.AddCategory(new SyndicationCategory(c)); } item.AddLink(new SyndicationLink(new Uri(baseUrl + postUrl))); //item.AddContributor(new SyndicationPerson("test", "*****@*****.**")); await writer.Write(item); } xmlWriter.Flush(); } var result = new ContentResult { ContentType = "application/xml", Content = sb.ToString(), StatusCode = 200 }; return(result); }