public async Task WriteRss20FileAsync(string absolutePath) { var feed = GetSyndicationItemCollection(FeedItemCollection); var settings = new XmlWriterSettings { Async = true, Encoding = Encoding.UTF8, Indent = true }; using var xmlWriter = XmlWriter.Create(absolutePath, settings); var writer = new RssFeedWriter(xmlWriter); await writer.WriteTitle(HeadTitle); await writer.WriteDescription(HeadDescription); await writer.Write(new SyndicationLink(new Uri(TrackBackUrl))); await writer.WritePubDate(DateTimeOffset.UtcNow); await writer.WriteCopyright(Copyright); await writer.WriteGenerator(Generator); foreach (var item in feed) { await writer.Write(item); } await xmlWriter.FlushAsync(); xmlWriter.Close(); }
private XmlFeedWriter InitializeRssFeedWriter(XmlWriter xmlWriter) { var result = new RssFeedWriter(xmlWriter); result.WriteTitle(_siteSettings.SiteName); result.WriteDescription(_siteSettings.Description); result.WriteCopyright(_siteSettings.Copyright); result.WriteGenerator(_siteSettings.Nickname); result.WritePubDate(_blogPostsConfig.Blogs.Where(x => x.Published).First().CreateDate.Date); return(result); }
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)); }
public async Task <string> WriteRssAsync() { var feed = GetItemCollection(FeedItemCollection); var settings = new XmlWriterSettings { Async = true }; var sw = new StringWriterWithEncoding(Encoding.UTF8); await using var xmlWriter = XmlWriter.Create(sw, settings); var writer = new RssFeedWriter(xmlWriter); await writer.WriteTitle(HeadTitle); await writer.WriteDescription(HeadDescription); await writer.Write(new SyndicationLink(new(TrackBackUrl))); await writer.WritePubDate(DateTimeOffset.UtcNow); await writer.WriteCopyright(Copyright); await writer.WriteGenerator(Generator); foreach (var item in feed) { await writer.Write(item); } await xmlWriter.FlushAsync(); xmlWriter.Close(); await sw.FlushAsync(); sw.GetStringBuilder(); var xml = sw.ToString(); return(xml); }
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")); }
public async Task ShouldGenerateBlogRss() { var projectInfo = this.TestContext.ShouldGetProjectDirectoryInfo(this.GetType()); #region test properties: var blobContainerName = this.TestContext.Properties["blobContainerName"].ToString(); var blobContainerNameClassic = this.TestContext.Properties["blobContainerNameClassic"].ToString(); var rssPath = this.TestContext.Properties["rssPath"].ToString(); rssPath = projectInfo.ToCombinedPath(rssPath); this.TestContext.ShouldFindFile(rssPath); #endregion var containerClassic = cloudStorageAccountClassic.CreateCloudBlobClient().GetContainerReference(blobContainerNameClassic); var keys = new AzureBlobKeys(); keys.Add <BlogEntry>(i => i.Slug); var repository = new BlogRepository(keys, containerClassic); var data = await(repository as IBlogEntryIndex).GetIndexAsync(); Assert.IsTrue(data.Any(), "The expected data are not here."); var feed = data .OrderByDescending(i => i.InceptDate) .Take(10); var builder = new StringBuilder(); var settings = new XmlWriterSettings { Async = true, CloseOutput = true, Encoding = Encoding.UTF8, Indent = true, OmitXmlDeclaration = true }; var person = new SyndicationPerson("Bryan Wilhite", "*****@*****.**"); using (var writer = XmlWriter.Create(builder, settings)) { var feedWriter = new RssFeedWriter(writer); await feedWriter.WritePubDate(DateTime.Now); await feedWriter.WriteTitle($">DayPath_"); await feedWriter.WriteDescription($"The technical journey of @BryanWilhite."); await feedWriter.WriteCopyright($"Bryan Wilhite, Songhay System {DateTime.Now.Year}"); await feedWriter.Write(new SyndicationLink(new Uri("http://songhayblog.azurewebsites.net", UriKind.Absolute))); var tasks = feed.Select(async entry => { var item = new SyndicationItem { Description = entry.Content, Id = entry.Slug, LastUpdated = entry.ModificationDate, Published = entry.InceptDate, Title = entry.Title }; item.AddContributor(person); item.AddLink(new SyndicationLink(new Uri($"http://songhayblog.azurewebsites.net/blog/entry/{entry.Slug}", UriKind.Absolute))); await feedWriter.Write(item); }); await Task.WhenAll(tasks); await writer.FlushAsync(); } File.WriteAllText(rssPath, builder.ToString()); var container = cloudStorageAccount.CreateCloudBlobClient().GetContainerReference(blobContainerName); await container.UploadBlobAsync(rssPath, string.Empty); }
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()); }