コード例 #1
0
        public async Task <Publication> Run(
            [ActivityTrigger] PublicationConfiguration publicationConfiguration,
            ILogger logger)
        {
            logger.LogInformation($"Started {nameof(GetLatestPublicationFromWebActivity)} for { publicationConfiguration.PublicationSourceOwner } { publicationConfiguration.PublicationSourceName}.");

            Publication publication = new NullPublication(publicationConfiguration.PublicationSourceName);

            using (var xmlReader = XmlReader.Create(publicationConfiguration.PublicationSourceUrl, new XmlReaderSettings()
            {
                Async = true
            }))
            {
                var parser = new RssParser();
                var reader = new RssFeedReader(xmlReader, parser);
                while (await reader.Read())
                {
                    if (reader.ElementType == SyndicationElementType.Item)
                    {
                        ISyndicationItem item = await reader.ReadItem();

                        publication = MapToPublication(publicationConfiguration, item);
                        break;
                    }
                }
            }

            logger.LogInformation($"Found publication on web for {publicationConfiguration.PublicationSourceName}: " +
                                  $"ID: {publication.Id}," +
                                  $"Date: {publication.PublicationDate:F}.");

            return(publication);
        }
コード例 #2
0
            public async Task <FeedItem[]> GetNewsFeed(CancellationToken cancelToken)
            {
                if (cancelToken.IsCancellationRequested)
                {
                    var rssFeedItems = new List <FeedItem>();
                    using (var xmlReader = XmlReader.Create(_FeedUri, new XmlReaderSettings()
                    {
                        Async = true
                    }))
                    {
                        var feedReader = new RssFeedReader(xmlReader);
                        while (await feedReader.Read().ConfigureAwait(false))
                        {
                            if (feedReader.ElementType == Microsoft.SyndicationFeed.SyndicationElementType.Item)
                            {
                                ISyndicationItem item = await feedReader.ReadItem().ConfigureAwait(false);

                                rssFeedItems.Add(item.ConvertToNewsItem());
                            }
                        }
                    }
                    return(rssFeedItems.OrderByDescending(p => p.PublishDate).ToArray());
                }
                else
                {
                    return(null);
                }
            }
コード例 #3
0
 public FeedItem(ISyndicationItem item, SyndicationFormat sourceFormat)
 {
     Title   = item.Title.Text;
     PubDate = item.PublishedDate.DateTime;
     Author  = item.Authors[0].Name;
     Content = sourceFormat == SyndicationFormat.Atom10 ? item.Content.Text : item.Summary.Text;
 }
コード例 #4
0
 public FeedItem(ISyndicationItem item, SyndicationFormat sourceFormat)
 {
     Title = item.Title.Text;
     PubDate = item.PublishedDate.DateTime;
     Author = item.Authors[0].Name;
     Content = sourceFormat == SyndicationFormat.Atom10 ? item.Content.Text : item.Summary.Text;
 }
コード例 #5
0
        public async Task <List <SyndicationItem> > GetNewsAsync()
        {
            var items = new List <SyndicationItem>();

            using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings {
                Async = true
            }))
            {
                var feedReader = new RssFeedReader(xmlReader);

                while (await feedReader.Read())
                {
                    switch (feedReader.ElementType)
                    {
                    case SyndicationElementType.Item:
                        ISyndicationItem item = await feedReader.ReadItem();

                        items.Add(new SyndicationItem(item));
                        break;

                    default:
                        break;
                    }
                }
            }

            return(items);
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: fredweb/oportunidade
        private static async Task <List <SyndicationItem> > GetItemFeed()
        {
            var ItemFeed = new List <SyndicationItem>();

            using (var http = new HttpClient())
            {
                var strFeed = await http.GetStringAsync("http://www.minutoseguros.com.br/blog/feed/");

                if (!string.IsNullOrWhiteSpace(strFeed))
                {
                    using (var xmlReader = XmlReader.Create(new StringReader(strFeed)))
                    {
                        xmlReader.Read();
                        var feedReader = new RssFeedReader(xmlReader);
                        while (await feedReader.Read())
                        {
                            switch (feedReader.ElementType)
                            {
                            case SyndicationElementType.Item:
                                ISyndicationItem item = await feedReader.ReadItem();

                                ItemFeed.Add((SyndicationItem)item);
                                break;
                            }
                        }
                    }
                }
            }
            return(ItemFeed);
        }
コード例 #7
0
        public async Task <IActionResult> Get()
        {
            var feedUri      = "http://www.dailyherald.com/rss/feed/?feed=news_top10";
            var rssNewsItems = new List <FeedItem>();

            using (var xmlReader = XmlReader.Create(feedUri, new XmlReaderSettings()
            {
                Async = true
            }))
            {
                var feedReader = new RssFeedReader(xmlReader);
                while (await feedReader.Read())
                {
                    if (feedReader.ElementType == SyndicationElementType.Item)
                    {
                        ISyndicationItem item = await feedReader.ReadItem();

                        rssNewsItems.Add(item.ConvertToNewsItem());
                    }
                }
            }

            var articlesByDate = rssNewsItems.OrderByDescending(p => p.PublishDate).ToArray();

            return(Ok(articlesByDate));
        }
コード例 #8
0
        public async Task <List <ISyndicationItem> > GetNewsFeed()
        {
            var rssNewsItems = new List <ISyndicationItem>();

            var httpClient = new HttpClient()
            {
                Timeout = TimeSpan.FromMinutes(10)
            };
            var xml = await httpClient.GetStringAsync(_feedUri);

            using (var xmlReader = XmlReader.Create(new StringReader(xml)))
            {
                XmlFeedReader feedReader = GetXmlFeedReader(xml, xmlReader);
                while (await feedReader.Read())
                {
                    try
                    {
                        if (feedReader.ElementType == SyndicationElementType.Item)
                        {
                            ISyndicationItem item = await feedReader.ReadItem();

                            rssNewsItems.Add(item);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }

            return(rssNewsItems.OrderByDescending(p => p.LastUpdated).ToList());
        }
コード例 #9
0
 public static NewsItem ConvertToNewsItem(this ISyndicationItem item)
 {
     return(new NewsItem(title: item.Title,
                         excerpt: item.Description.PlainTextTruncate(200),
                         publishDate: item.Published.UtcDateTime,
                         uri: item.Links.First().Uri.AbsoluteUri));
 }
コード例 #10
0
        public async Task <NewsArticle[]> GetNewsFeedAsync(string feed)
        {
            var rssNewsItems = new List <NewsArticle>();

            using (var xmlReader = XmlReader.Create(feed, new XmlReaderSettings()
            {
                Async = true
            }))
            {
                var feedReader = new RssFeedReader(xmlReader);
                while (await feedReader.Read().ConfigureAwait(false))
                {
                    if (feedReader.ElementType == SyndicationElementType.Item)
                    {
                        ISyndicationItem item = await feedReader.ReadItem().ConfigureAwait(false);

                        var lcTitle = item.Title.ToLower();
                        if (lcTitle.Contains("covid") || lcTitle.Contains("corona"))
                        {
                            rssNewsItems.Add(new NewsArticle()
                            {
                                Title       = item.Title.ToString(),
                                Excerpt     = item.Description.ToString(),
                                PublishDate = item.Published.DateTime,
                                Uri         = item.Links.FirstOrDefault().Uri //.AbsoluteUri for string
                            });
                        }
                    }
                }
            }
            return(rssNewsItems.OrderByDescending(p => p.PublishDate).ToArray());
        }
コード例 #11
0
 public static NewsItem ConvertToNewsItem(this ISyndicationItem item)
 {
     return(new NewsItem(title: item.Title,
                         content: item.Description,
                         posted: item.Published.UtcDateTime,
                         link: item.Links.First().Uri.AbsoluteUri));
 }
コード例 #12
0
        // RSS Feed conversion. RSS has no summary
        private FeedEntry CreateFeedEntry(ISyndicationItem entry, Feed feed)
        {
            var link = GetLinkFromFeedEntry(entry.Links);

            var feedEntry = new FeedEntry()
            {
                FeedTitle   = feed.Name,
                Id          = entry.Id,
                Title       = entry.Title,
                Summary     = null,
                Description = entry.Description,
                LastUpdated = entry.LastUpdated,
                Published   = entry.Published,
                Link        = link
            };

            if (feedEntry.Id == null)
            {
                feedEntry.Id = CreateIdFromFeedEntry(feedEntry);
            }

            //TODO: This could be better
            if (entry.Categories != null)
            {
                foreach (var category in entry.Categories)
                {
                    feedEntry.Tags.Add(category.Name);
                }
            }

            return(feedEntry);
        }
コード例 #13
0
        public async Task <List <SyndicationItem> > GetNewsAsync(string url)
        {
            var items = new List <SyndicationItem>();

            using (var xmlReader = XmlReader.Create(url, new XmlReaderSettings {
                Async = true
            }))
            {
                var feedReader = new RssFeedReader(xmlReader);

                while (await feedReader.Read())
                {
                    switch (feedReader.ElementType)
                    {
                    case SyndicationElementType.Item:
                        ISyndicationItem item = await feedReader.ReadItem();

                        items.Add(new SyndicationItem(item));
                        break;

                    default:
                        break;
                    }
                }
            }

            await Task.Delay(5000);

            return(items);
        }
コード例 #14
0
ファイル: FeedItem.cs プロジェクト: weedkiller/discoverdotnet
        public FeedItem(ISyndicationItem item, DateTimeOffset recent)
        {
            Title       = item.Title;
            Link        = item.Links.FirstOrDefault(x => x.RelationshipType == RssLinkTypes.Alternate)?.Uri.ToString() ?? item.Id;
            Published   = item.Published != default ? item.Published : item.LastUpdated;
            Recent      = Published > recent;
            Description = item.Description;
            Links       = item.Links
                          .Where(x => !string.IsNullOrEmpty(x.MediaType))
                          .GroupBy(x => x.MediaType)
                          .Select(x => x.First())
                          .ToDictionary(x => x.MediaType, x => x.Uri.ToString());

            ISyndicationPerson person = item.Contributors.FirstOrDefault(x => x.RelationshipType == "author");

            if (person != null)
            {
                Author = person.Name ?? person.Email;
            }

            AtomEntry atom = item as AtomEntry;

            if (atom != null && !string.IsNullOrEmpty(atom.Summary))
            {
                Description = atom.Summary;
            }
        }
コード例 #15
0
 internal void DisplayItem(ISyndicationItem item)
 {
     Console.WriteLine("--- Item Read ---");
     Console.WriteLine("Title: " + item.Title);
     Console.WriteLine("Description: " + item.Description);
     Console.WriteLine("PubDate: " + item.Published);
     Console.WriteLine();
 }
コード例 #16
0
    // Read an RssFeed
    public static async Task CreateRssFeedReaderExample(string filePath)
    {
        // Create an XmlReader
        // Example: ..\tests\TestFeeds\rss20-2items.xml
        using (var xmlReader = XmlReader.Create(filePath, new XmlReaderSettings()
        {
            Async = true
        }))
        {
            // Instantiate an Rss20FeedReader using the XmlReader.
            // This will assign as default an Rss20FeedParser as the parser.
            var feedReader = new RssFeedReader(xmlReader);

            //
            // Read the feed
            while (await feedReader.Read())
            {
                switch (feedReader.ElementType)
                {
                // Read category
                case SyndicationElementType.Category:
                    ISyndicationCategory category = await feedReader.ReadCategory();

                    break;

                // Read Image
                case SyndicationElementType.Image:
                    ISyndicationImage image = await feedReader.ReadImage();

                    break;

                // Read Item
                case SyndicationElementType.Item:
                    ISyndicationItem item = await feedReader.ReadItem();

                    break;

                // Read link
                case SyndicationElementType.Link:
                    ISyndicationLink link = await feedReader.ReadLink();

                    break;

                // Read Person
                case SyndicationElementType.Person:
                    ISyndicationPerson person = await feedReader.ReadPerson();

                    break;

                // Read content
                default:
                    ISyndicationContent content = await feedReader.ReadContent();

                    break;
                }
            }
        }
    }
コード例 #17
0
        public static async Task <List <ComplexSyndication> > Get(params Uri[] url)
        {
            var parser = new RssParser();

            var toBeProcessed = new List <Task <HttpResponseMessage> >();

            var httpClient = HttpClientFactory.Get();

            foreach (var u in url)
            {
                var t = httpClient.GetAsync(u);
                toBeProcessed.Add(t);
            }

            Task.WaitAll(toBeProcessed.ToArray());

            var syndications = new List <ComplexSyndication>();

            foreach (var result in toBeProcessed)
            {
                var res           = result.Result;
                var resultContent = await res.Content.ReadAsStringAsync();

                using (var xmlReader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(resultContent))))
                {
                    var feedReader = new RssFeedReader(xmlReader);

                    var syndication = new ComplexSyndication();

                    while (await feedReader.Read())
                    {
                        switch (feedReader.ElementType)
                        {
                        case SyndicationElementType.Item:
                            //ISyndicationContent is a raw representation of the feed
                            ISyndicationContent content = await feedReader.ReadContent();

                            ISyndicationItem    item    = parser.CreateItem(content);
                            ISyndicationContent outline = content.Fields.FirstOrDefault(f => f.Name == "source:outline");

                            var i = new ComplexSyndicationItem(item, outline);
                            Replay.OnNext(i);
                            syndication.Items.Add(i);
                            break;

                        default:
                            break;
                        }
                    }

                    syndications.Add(syndication);
                }
            }

            Replay.OnCompleted();

            return(syndications);
        }
コード例 #18
0
ファイル: RSSRepo.cs プロジェクト: tvandevoorde/magic-mirror
        public override async Task <RSSEntity> GetEntityAsync()
        {
            try
            {
                var client = new HttpClient();
                var stream = await client.GetStreamAsync(_feed);

                using (XmlReader reader = XmlReader.Create(stream))
                {
                    var feedReader = new RssFeedReader(reader);
                    var result     = new RSSEntity();
                    result.Items = new List <RSSEntityItem>();

                    while (await feedReader.Read() && result.Items.Count <= 3)
                    {
                        switch (feedReader.ElementType)
                        {
                        // Read category
                        case SyndicationElementType.Category:
                            //DON't Care about categories ISyndicationCategory category = await feedReader.ReadCategory();
                            break;

                        // Read Image
                        case SyndicationElementType.Image:
                            //DON't Care about images ISyndicationImage image = await feedReader.ReadImage();
                            break;

                        // Read Item
                        case SyndicationElementType.Item:
                            ISyndicationItem item = await feedReader.ReadItem();

                            result.Items.Add(new RSSEntityItem {
                                Title = item.Title, Summary = item.Description, Link = item.Links.FirstOrDefault().Uri.ToString()
                            });
                            break;

                        // Read link
                        case SyndicationElementType.Link:
                            //DON't Care aboutISyndicationLink link = await feedReader.ReadLink();
                            break;

                        // Read Person
                        case SyndicationElementType.Person:
                            //DON't Care about ISyndicationPerson person = await feedReader.ReadPerson();
                            break;

                        // Read content
                        default:
                            //DON't Care about ISyndicationContent content = await feedReader.ReadContent();
                            break;
                        }
                    }

                    return(result);
                }
            }
            catch (Exception) { throw; }
        }
コード例 #19
0
        private async Task <bool> retrievePosts(Feed feed)
        {
            using (var xmlReader = XmlReader.Create("https://azurecomcdn.azureedge.net/en-us/blog/feed/", new XmlReaderSettings()
            {
                Async = true
            }))
            {
                // Instantiate an Rss20FeedReader using the XmlReader.
                // This will assign as default an Rss20FeedParser as the parser.
                var feedReader = new RssFeedReader(xmlReader);

                //
                // Read the feed
                while (await feedReader.Read())
                {
                    switch (feedReader.ElementType)
                    {
                    // Read category
                    case SyndicationElementType.Category:
                        ISyndicationCategory category = await feedReader.ReadCategory();

                        break;

                    // Read Image
                    case SyndicationElementType.Image:
                        ISyndicationImage image = await feedReader.ReadImage();

                        break;

                    // Read Item
                    case SyndicationElementType.Item:
                        ISyndicationItem item = await feedReader.ReadItem();

                        break;

                    // Read link
                    case SyndicationElementType.Link:
                        ISyndicationLink link = await feedReader.ReadLink();

                        break;

                    // Read Person
                    case SyndicationElementType.Person:
                        ISyndicationPerson person = await feedReader.ReadPerson();

                        break;

                    // Read content
                    default:
                        ISyndicationContent content = await feedReader.ReadContent();

                        break;
                    }
                }
            }
            return(true);
        }
コード例 #20
0
        public static async Task TestReadFeedElements(XmlReader outerXmlReader)
        {
            using (var xmlReader = outerXmlReader)
            {
                var reader = new RssFeedReader(xmlReader);
                int items  = 0;
                while (await reader.Read())
                {
                    switch (reader.ElementType)
                    {
                    case SyndicationElementType.Person:
                        ISyndicationPerson person = await reader.ReadPerson();

                        Assert.True(person.Email == "John Smith");
                        break;

                    case SyndicationElementType.Link:
                        ISyndicationLink link = await reader.ReadLink();

                        Assert.True(link.Length == 123);
                        Assert.True(link.MediaType == "testType");
                        Assert.True(link.Uri.OriginalString == "http://example.com/");
                        break;

                    case SyndicationElementType.Image:
                        ISyndicationImage image = await reader.ReadImage();

                        Assert.True(image.Title == "Microsoft News");
                        Assert.True(image.Description == "Test description");
                        Assert.True(image.Url.OriginalString == "http://2.bp.blogspot.com/-NA5Jb-64eUg/URx8CSdcj_I/AAAAAAAAAUo/eCx0irI0rq0/s1600/bg_Microsoft_logo3-20120824073001907469-620x349.jpg");
                        break;

                    case SyndicationElementType.Item:
                        items++;
                        ISyndicationItem item = await reader.ReadItem();

                        if (items == 1)
                        {
                            Assert.True(item.Title == "Lorem ipsum 2017-07-06T20:25:00+00:00");
                            Assert.True(item.Description == "Exercitation sit dolore mollit et est eiusmod veniam aute officia veniam ipsum.");
                            Assert.True(item.Links.Count() == 3);
                        }
                        else if (items == 2)
                        {
                            Assert.True(item.Title == "Lorem ipsum 2017-07-06T20:24:00+00:00");
                            Assert.True(item.Description == "Do ipsum dolore veniam minim est cillum aliqua ea.");
                            Assert.True(item.Links.Count() == 3);
                        }

                        break;

                    default:
                        break;
                    }
                }
            }
        }
コード例 #21
0
        private static async Task <List <object> > ParseExport(XmlReader xmlReader)
        {
            List <object> result = new List <object>();
            {
                var feedReader = new AtomFeedReader(xmlReader);
                while (await feedReader.Read())
                {
                    switch (feedReader.ElementType)
                    {
                    // Read category
                    case SyndicationElementType.Category:
                        ISyndicationCategory category = await feedReader.ReadCategory();

                        result.Add(category);
                        break;

                    // Read Image
                    case SyndicationElementType.Image:
                        ISyndicationImage image = await feedReader.ReadImage();

                        result.Add(image);
                        break;

                    // Read Item
                    case SyndicationElementType.Item:
                        ISyndicationItem item = await feedReader.ReadItem();

                        result.Add(item);
                        break;

                    // Read link
                    case SyndicationElementType.Link:
                        ISyndicationLink link = await feedReader.ReadLink();

                        result.Add(link);
                        break;

                    // Read Person
                    case SyndicationElementType.Person:
                        ISyndicationPerson person = await feedReader.ReadPerson();

                        result.Add(person);
                        break;

                    // Read content
                    default:
                        ISyndicationContent content = await feedReader.ReadContent();

                        result.Add(content);
                        break;
                    }
                }

                return(result);
            }
        }
コード例 #22
0
        private async Task <List <NewsItem> > GetFeedInternal()
        {
            var opml     = XDocument.Load(_config.OpmlFile);
            var feedData = from item in opml.Descendants("outline")
                           select new
            {
                Source = (string)item.Attribute("title"),
                XmlUrl = (string)item.Attribute("xmlUrl")
            };

            var feed = new List <NewsItem>();

            foreach (var currentFeed in feedData)
            {
                using (var xmlReader = XmlReader.Create(currentFeed.XmlUrl, new XmlReaderSettings()
                {
                    Async = true
                }))
                {
                    var feedReader = new RssFeedReader(xmlReader);

                    while (await feedReader.Read())
                    {
                        if (feedReader.ElementType == SyndicationElementType.Item)
                        {
                            ISyndicationItem item = await feedReader.ReadItem();

                            if (string.IsNullOrWhiteSpace(item.Description) ||
                                !item.Links.First().Uri.IsAbsoluteUri)
                            {
                                continue;
                            }

                            var uri = item.Links.First().Uri.AbsoluteUri;
                            try
                            {
                                feed.Add(new NewsItem
                                {
                                    Title       = item.Title,
                                    Uri         = uri,
                                    Excerpt     = item.Description.PlainTextTruncate(120),
                                    PublishDate = item.Published.UtcDateTime,
                                    Source      = currentFeed.Source ?? item.Contributors.First().Name ?? item.Contributors.First().Email,
                                    NewsType    = GetNewsTypeForUri(uri)
                                });
                            }
                            catch (Exception ex)
                            {
                                _log.LogError(ex.ToString());
                            }
                        }
                    }
                }
            }
            return(feed.OrderByDescending(f => f.PublishDate).ToList());
        }
コード例 #23
0
        public FeedItem(ISyndicationItem item, DateTimeOffset recent, Uri website, bool truncateDescription, IExecutionContext context)
        {
            Title = item.Title;
            ISyndicationLink firstLink = item.Links.FirstOrDefault(x => x.RelationshipType == RssLinkTypes.Alternate);

            if (firstLink != null)
            {
                Link = firstLink.Uri.IsAbsoluteUri ? firstLink.Uri.AbsoluteUri : new Uri(website, firstLink.Uri).AbsoluteUri;
            }
            else
            {
                Link = item.Id;
            }

            Published = item.Published != default ? item.Published : item.LastUpdated;
            Recent    = Published > recent;
            Links     = item.Links
                        .Where(x => !string.IsNullOrEmpty(x.MediaType))
                        .GroupBy(x => x.MediaType)
                        .Select(x => x.First())
                        .ToDictionary(x => x.MediaType, x => x.Uri.ToString());

            ISyndicationPerson person = item.Contributors.FirstOrDefault(x => x.RelationshipType == "author");

            if (person != null)
            {
                Author = person.Name ?? person.Email;
            }

            Description = item.Description;
            AtomEntry atom = item as AtomEntry;

            if (atom != null && !string.IsNullOrEmpty(atom.Summary))
            {
                Description = atom.Summary;
            }

            if (truncateDescription)
            {
                try
                {
                    // Use the first <p> if one is found
                    HtmlParser    htmlParser   = new HtmlParser();
                    IHtmlDocument htmlDocument = htmlParser.ParseDocument(Description);
                    IElement      element      = htmlDocument.QuerySelector("p");
                    if (element is object && !string.IsNullOrWhiteSpace(element.OuterHtml))
                    {
                        Description = element.OuterHtml;
                    }
                }
                catch (Exception ex)
                {
                    context.LogWarning($"Error parsing HTML description for feed {Title}: {ex.Message}");
                }
            }
        }
コード例 #24
0
        public static PocketEntry ToPocketEntry(this ISyndicationItem item)
        {
            Guard.Against.Null(item, nameof(item));

            return(new PocketEntry(
                       item.Title,
                       item.Categories.FirstOrDefault()?.Name,
                       pubDate: item.Published.UtcDateTime,
                       link: item.Links.FirstOrDefault()?.Uri.OriginalString));
        }
コード例 #25
0
 public static Event ConvertToEvent(this ISyndicationItem item)
 {
     return(new Event
     {
         Title = item.Title,
         Description = item.Description,
         Category = item.Categories.First().Name,
         Date = item.Published.Date
     });
 }
コード例 #26
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory logger, IConfiguration configuration)
        {
            //These are the four default services available at Configure
            app.Run(async context =>
            {
                var items = new List <SyndicationItem>();

                using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings {
                    Async = true
                }))
                {
                    var feedReader = new RssFeedReader(xmlReader);

                    while (await feedReader.Read())
                    {
                        switch (feedReader.ElementType)
                        {
                        case SyndicationElementType.Item:
                            ISyndicationItem item = await feedReader.ReadItem();
                            items.Add(new SyndicationItem(item));
                            break;

                        default:
                            break;
                        }
                    }
                }

                var str = new StringBuilder();
                str.Append("<ul>");
                foreach (var i in items)
                {
                    str.Append($"<li>{i.Description}</li>");
                }
                str.Append("</ul>");

                context.Response.Headers.Add("Content-Type", "text/html");
                await context.Response.WriteAsync($@"
                <html>
                    <head>
                        <link rel=""stylesheet"" type=""text/css"" href=""http://fonts.googleapis.com/css?family=Germania+One"">
                        <style>
                         body {{
                            font-family: 'Germania One', serif;
                            font-size: 24px;
                        }}
                        </style>
                    </head>
                    <body>
                        {str.ToString()}
                    </body>
                </html>
                ");
            });
        }
コード例 #27
0
        static async Task MainAsync(string[] args)
        {
            var items = new List <SyndicationItem>();

            using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings {
                Async = true
            }))
            {
                var feedReader = new RssFeedReader(xmlReader);

                while (await feedReader.Read())
                {
                    switch (feedReader.ElementType)
                    {
                    case SyndicationElementType.Item:
                        ISyndicationItem item = await feedReader.ReadItem();

                        items.Add(new SyndicationItem(item));
                        break;

                    default:
                        break;
                    }
                }
            }

            var str = new StringBuilder();

            str.Append("<ul>");
            foreach (var i in items)
            {
                str.Append($"<li>{i.Description}</li>");
            }
            str.Append("</ul>");

            var html = $@"
<html>
    <head>
        <link rel=""stylesheet"" type=""text/css"" href=""http://fonts.googleapis.com/css?family=Germania+One"">
        <style>
            body {{
            font-family: 'Germania One', serif;
            font-size: 24px;
        }}
        </style>
    </head>
    <body>
        {str.ToString()}
    </body>
</html>
";
            var path = Path.Combine(Directory.GetCurrentDirectory(), "rss.html");

            File.WriteAllText(path, html);
        }
コード例 #28
0
        public static List <Tuple <string, string, string, DateTimeOffset> > Latest5PostsFromRss(string filePath)
        {
            List <Tuple <string, string, string, DateTimeOffset> > result = new List <Tuple <string, string, string, DateTimeOffset> >();

            using (var xmlReader = XmlReader.Create(filePath, new XmlReaderSettings()))
            {
                var feedReader = new RssFeedReader(xmlReader);

                while (feedReader.Read().Result)
                {
                    switch (feedReader.ElementType)
                    {
                    // Read Item
                    case SyndicationElementType.Item:
                        ISyndicationItem item = feedReader.ReadItem().Result;     //AsyncHelper.ci.GetResult(feedReader.ReadItem());
                        result.Add(new Tuple <string, string, string, DateTimeOffset>(item.Title, item.Links.First().Uri.ToString(), item.Description, item.Published));
                        break;

                        #region MyRegion
                        //// Read category
                        //case SyndicationElementType.Category:
                        //    ISyndicationCategory category = await feedReader.ReadCategory();
                        //    break;

                        //// Read Image
                        //case SyndicationElementType.Image:
                        //    ISyndicationImage image = await feedReader.ReadImage();
                        //    break;
                        //// Read link
                        //case SyndicationElementType.Link:
                        //    ISyndicationLink link = await feedReader.ReadLink();
                        //    break;

                        //// Read Person
                        //case SyndicationElementType.Person:
                        //    ISyndicationPerson person = await feedReader.ReadPerson();
                        //    break;

                        //// Read content
                        //default:
                        //    ISyndicationContent content = await feedReader.ReadContent();
                        //    break;
                        #endregion
                    }

                    if (result.Count == 5)
                    {
                        break;
                    }
                }
            }

            return(result);
        }
コード例 #29
0
 public ComplexSyndicationItem(ISyndicationItem item, ISyndicationContent outline = null)
 {
     Item = item;
     if (outline != null)
     {
         Outline = new Outline
         {
             Attributes = outline.Attributes.ToDictionary(x => x.Name, x => x.Value)
         };
     }
 }
コード例 #30
0
        public TorrentzMovieInfo(ISyndicationItem item)
        {
            Link = item.Id;
            Date = item.PublishDate;
            Raw  = item.Title;

            ParseTitle(item.Title);

            summary = item.Summary;
            ParseSummary();
        }
コード例 #31
0
ファイル: Program.cs プロジェクト: aydey/dotnetcore2
 public OutlineSyndicationItem(ISyndicationItem basic, ISyndicationContent outline)
 {
     Item = basic;
     if (outline != null)
     {
         Outline = new Outline
         {
             Text       = outline.Attributes.FirstOrDefault(x => x.Name.Equals("text", StringComparison.OrdinalIgnoreCase))?.Value,
             Attributes = outline.Attributes.ToDictionary(x => x.Name, x => x.Value)
         };
     }
 }