Exemple #1
0
        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();
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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)
        {
            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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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 <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);
        }
Exemple #9
0
        /// <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);
        }
Exemple #10
0
        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"));
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        /// <summary>
        /// Returns the rss xml string for the blog or a blog category. The result is cached for 1 hour.
        /// The rss feed always returns first page with 10 results.
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        private async Task <string> GetFeed(Category cat = null)
        {
            var key = cat == null ? "RssFeed" : $"RssFeed_{cat.Slug}";

            return(await _cache.GetAsync(key, new TimeSpan(1, 0, 0), async() =>
            {
                var sw = new StringWriter();
                using (XmlWriter xmlWriter = XmlWriter.Create(sw, new XmlWriterSettings()
                {
                    Async = true, Indent = true
                }))
                {
                    var postList = cat == null ?
                                   await _blogSvc.GetPostsAsync(1, 10) :
                                   await _blogSvc.GetPostsForCategoryAsync(cat.Slug, 1);
                    var coreSettings = await _settingSvc.GetSettingsAsync <CoreSettings>();
                    var blogSettings = await _settingSvc.GetSettingsAsync <BlogSettings>();
                    var vm = new BlogPostListViewModel(postList, blogSettings, Request);

                    var channelTitle = cat == null ? "Fanray" : $"{cat.Title} - Fanray";
                    var channelDescription = coreSettings.Tagline;
                    var channelLink = $"{Request.Scheme}://{Request.Host}";
                    var channelLastPubDate = postList.Posts.Count <= 0 ? DateTimeOffset.UtcNow : postList.Posts[0].CreatedOn;

                    var writer = new RssFeedWriter(xmlWriter);
                    await writer.WriteTitle(channelTitle);
                    await writer.WriteDescription(channelDescription);
                    await writer.Write(new SyndicationLink(new Uri(channelLink)));
                    await writer.WritePubDate(channelLastPubDate);
                    await writer.WriteGenerator("https://www.fanray.com");

                    foreach (var postVM in vm.BlogPostViewModels)
                    {
                        var post = postVM;
                        var item = new SyndicationItem()
                        {
                            Id = postVM.Permalink, // guid https://www.w3schools.com/xml/rss_tag_guid.asp
                            Title = post.Title,
                            Description = blogSettings.FeedShowExcerpt ? post.Excerpt : post.Body,
                            Published = post.CreatedOn,
                        };

                        // link to the post
                        item.AddLink(new SyndicationLink(new Uri(postVM.CanonicalUrl)));

                        // category takes in both cats and tags
                        item.AddCategory(new SyndicationCategory(post.Category.Title));
                        foreach (var tag in post.Tags)
                        {
                            item.AddCategory(new SyndicationCategory(tag.Title));
                        }

                        // https://www.w3schools.com/xml/rss_tag_author.asp
                        // the author tag exposes email
                        //item.AddContributor(new SyndicationPerson(post.User.DisplayName, post.User.Email));

                        await writer.Write(item);
                    }

                    xmlWriter.Flush();
                }

                return sw.ToString();
            }));
        }