private async Task <ISyndicationFeedWriter> GetWriter(string?type, XmlWriter xmlWriter, DateTime updated) { var host = $"{this.Request.Scheme}://{this.Request.Host}/"; if (type?.Equals("rss", StringComparison.OrdinalIgnoreCase) ?? false) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(this.manifest.Name).ConfigureAwait(false); await rss.WriteDescription(this.manifest.Description).ConfigureAwait(false); await rss.WriteGenerator("Miniblog.Core").ConfigureAwait(false); await rss.WriteValue("link", host).ConfigureAwait(false); return(rss); } var atom = new AtomFeedWriter(xmlWriter); await atom.WriteTitle(this.manifest.Name).ConfigureAwait(false); await atom.WriteId(host).ConfigureAwait(false); await atom.WriteSubtitle(this.manifest.Description).ConfigureAwait(false); await atom.WriteGenerator("Miniblog.Core", "https://github.com/madskristensen/Miniblog.Core", "1.0").ConfigureAwait(false); await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)).ConfigureAwait(false); return(atom); }
private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated) { string host = Request.Scheme + "://" + Request.Host + "/"; if (type.Equals("rss", StringComparison.OrdinalIgnoreCase)) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(_manifest.Name); await rss.WriteDescription(_manifest.Description); await rss.WriteGenerator("BrickApp"); await rss.WriteValue("link", host); return(rss); } var atom = new AtomFeedWriter(xmlWriter); await atom.WriteTitle(_manifest.Name); await atom.WriteId(host); await atom.WriteSubtitle(_manifest.Description); await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ")); return(atom); }
private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated) { string host = Request.Scheme + "://" + Request.Host + "/"; if (type.Equals("rss", StringComparison.OrdinalIgnoreCase)) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(_settings.Value.Name); await rss.WriteDescription(_settings.Value.Description); await rss.WriteGenerator("Miniblog.Core"); await rss.WriteValue("link", host); return(rss); } var atom = new AtomFeedWriter(xmlWriter); await atom.WriteTitle(_settings.Value.Name); await atom.WriteId(host); await atom.WriteSubtitle(_settings.Value.Description); await atom.WriteGenerator("Miniblog.Core", "https://github.com/madskristensen/Miniblog.Core", "1.0"); await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ")); return(atom); }
private async Task <ISyndicationFeedWriter> GetWriter(string type, XmlWriter xmlWriter, DateTime updated) { var host = Request.Scheme + "://" + Request.Host + "/"; if (type.Equals("rss", StringComparison.OrdinalIgnoreCase)) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(_settings.Brand); await rss.WriteDescription(_settings.Description); await rss.WriteGenerator("Bagombo Blog Engine"); await rss.WriteValue("link", host); return(rss); } var atom = new AtomFeedWriter(xmlWriter); await atom.WriteTitle(_settings.Brand); await atom.WriteId(host); await atom.WriteSubtitle(_settings.Description); await atom.WriteGenerator("Bagombo Blog Engine", "https://github.com/tylerlrhodes/bagobo", "0.2.5a"); await atom.WriteValue("updated", updated.ToString("yyyy-MM-ddTHH:mm:ssZ")); return(atom); }
public async Task ExecuteResultAsync(ActionContext context) { var response = context.HttpContext.Response; var request = context.HttpContext.Request; response.ContentType = "application/xml"; var host = request.Scheme + "://" + request.Host; using (var xmlWriter = XmlWriter.Create(response.Body, new XmlWriterSettings() { Async = true, Indent = true, Encoding = new UTF8Encoding(true) })) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(_options.Value.Title); await rss.WriteDescription(_options.Value.Description); await rss.WriteGenerator(_options.Value.GeneratorDescription); await rss.WriteValue("link", host); foreach (var post in _page.Items) { var item = new AtomEntry { Title = post.Title, Description = post.GetContentWithoutDataSrc(), Id = post.Id.ToString(), Published = post.PublishedDate.Value, LastUpdated = post.ModifiedDate, ContentType = "html", }; foreach (var tag in post.BlogStoryTags) { item.AddCategory(new SyndicationCategory(tag.Tag.Name)); } item.AddContributor(new SyndicationPerson(_options.Value.AuthorName, _options.Value.FullEmail, "author")); item.AddLink(new SyndicationLink(new Uri($"{host}/{post.Alias}"))); await rss.Write(item); } } }
public async Task WriteValue() { var sb = new StringBuilder(); using (var xmlWriter = XmlWriter.Create(sb)) { var writer = new RssFeedWriter(xmlWriter); await writer.WriteValue("CustomTag", "Custom Content"); await writer.Flush(); } var res = sb.ToString(); Assert.True(res == "<?xml version=\"1.0\" encoding=\"utf-16\"?><rss version=\"2.0\"><channel><CustomTag>Custom Content</CustomTag></channel></rss>"); }
static void WriteRss(IEnumerable <dynamic> items) { var streamWritter = File.CreateText($"../{FeedPath}"); using (var xmlWriter = XmlWriter.Create(streamWritter, new XmlWriterSettings { Indent = true })) { var writer = new RssFeedWriter(xmlWriter); writer.WriteTitle(FullName); writer.WriteDescription(FeedDescription); writer.WriteValue("link", Link); var markdown = new Markdown(); foreach (var item in items) { var itemPath = string.Format(ItemFilenamePathFormat, item.MarkdownFilename); var markdownText = File.ReadAllText($"../{itemPath}"); var permalink = $"{Link}/#/{item.MarkdownFilename}"; var syndicationItem = new SyndicationItem { Title = item.Title, Description = markdown.Transform(markdownText), Published = item.Date }; syndicationItem.AddContributor(new SyndicationPerson(FullName, $"{Email} ({FullName})")); syndicationItem.AddLink(new SyndicationLink(new Uri(permalink), "guid")); string category = item.Category; if (!string.IsNullOrWhiteSpace(category)) { syndicationItem.AddCategory(new SyndicationCategory(category)); } writer.Write(syndicationItem); } xmlWriter.Flush(); } }
/// <summary> /// Creates the feed writer and writes the initial headers. /// </summary> /// <param name="writer">The current xml writer</param> /// <param name="blog">The blog service</param> /// <param name="url">The currently requested url</param> /// <param name="host">The host name</param> /// <returns>The feed writer</returns> private async Task <ISyndicationFeedWriter> GetWriter(XmlWriter writer, IBlogService blog, string url, string host, DateTime?latest) { var segments = url.Substring(1).Split('/'); if (latest.HasValue && segments.Length == 2) { if (segments[1] == "rss") { var rss = new RssFeedWriter(writer); // Write feed headers await rss.WriteTitle(blog.Settings.Title); await rss.WriteDescription(blog.Settings.Description); await rss.WriteGenerator("RazorBlog"); await rss.WriteValue("link", host); return(rss); } else if (segments[1] == "atom") { var atom = new AtomFeedWriter(writer); // Write feed headers await atom.WriteTitle(blog.Settings.Title); await atom.WriteId(host); await atom.WriteSubtitle(blog.Settings.Description); await atom.WriteGenerator("RazorBlog", "https://github.com/tidyui/razorblog", "0.1"); await atom.WriteValue("updated", latest.Value.ToString("yyyy-MM-ddTHH:mm:ssZ")); return(atom); } } return(null); }
public async Task <ISyndicationFeedWriter> GetWriter(string type, string host, XmlWriter xmlWriter) { var lastPost = _db.BlogPosts.All().OrderByDescending(p => p.Published).FirstOrDefault(); var blog = await _db.CustomFields.GetBlogSettings(); if (lastPost == null) { return(null); } if (type.Equals("rss", StringComparison.OrdinalIgnoreCase)) { var rss = new RssFeedWriter(xmlWriter); await rss.WriteTitle(blog.Title); await rss.WriteDescription(blog.Description); await rss.WriteGenerator("Blogifier"); await rss.WriteValue("link", host); return(rss); } var atom = new AtomFeedWriter(xmlWriter); await atom.WriteTitle(blog.Title); await atom.WriteId(host); await atom.WriteSubtitle(blog.Description); await atom.WriteGenerator("Blogifier", "https://github.com/blogifierdotnet/Blogifier", "1.0"); await atom.WriteValue("updated", lastPost.Published.ToString("yyyy-MM-ddTHH:mm:ssZ")); return(atom); }
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()); }