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));
        }
Example #2
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"));
        }
Example #3
0
        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);
        }