public async Task ReadItem() { using (XmlReader xmlReader = XmlReader.Create(@"..\..\..\TestFeeds\simpleAtomFeed.xml", new XmlReaderSettings { Async = true })) { var reader = new AtomFeedReader(xmlReader); while (await reader.Read()) { if (reader.ElementType == SyndicationElementType.Item) { IAtomEntry item = await reader.ReadEntry(); //Assert content of item Assert.True(item.Title == "Atom draft-07 snapshot"); Assert.True(item.Links.Count() == 3); Assert.True(item.Contributors.Count() == 3); Assert.True(item.Rights == "All rights Reserved. Contoso."); Assert.True(item.Id == "tag:example.org,2003:3.2397"); } } } }
private async Task <List <BlogPost> > GetFeed() { var xmlReader = XmlReader.Create(_settings.Value.FeedUrl); var reader = new AtomFeedReader(xmlReader); var posts = new List <BlogPost>(); // // Read the feed while (await reader.Read()) { // // Check the type of the current element. switch (reader.ElementType) { // // Read category case SyndicationElementType.Category: ISyndicationCategory category = await reader.ReadCategory(); break; // // Read image case SyndicationElementType.Image: ISyndicationImage image = await reader.ReadImage(); break; // // Read entry case SyndicationElementType.Item: IAtomEntry entry = await reader.ReadEntry(); // these are the only ones we need for now posts.Add(new BlogPost { Title = entry.Title, PublishedDate = entry.Published.DateTime, Categories = entry.Categories?.Select(c => c.Name)?.ToList() }); break; // // Read link case SyndicationElementType.Link: ISyndicationLink link = await reader.ReadLink(); break; // // Read person case SyndicationElementType.Person: ISyndicationPerson person = await reader.ReadPerson(); break; // // Read content default: ISyndicationContent content = await reader.ReadContent(); break; } } return(posts); }
public static async Task ReadAtomFeed(string filePath) { // // Create an XmlReader from file // Example: ..\tests\TestFeeds\simpleAtomFeed.xml using (XmlReader xmlReader = XmlReader.Create(filePath, new XmlReaderSettings() { Async = true })) { // // Create an AtomFeedReader var reader = new AtomFeedReader(xmlReader); // // Read the feed while (await reader.Read()) { // // Check the type of the current element. switch (reader.ElementType) { // // Read category case SyndicationElementType.Category: ISyndicationCategory category = await reader.ReadCategory(); break; // // Read image case SyndicationElementType.Image: ISyndicationImage image = await reader.ReadImage(); break; // // Read entry case SyndicationElementType.Item: IAtomEntry entry = await reader.ReadEntry(); break; // // Read link case SyndicationElementType.Link: ISyndicationLink link = await reader.ReadLink(); break; // // Read person case SyndicationElementType.Person: ISyndicationPerson person = await reader.ReadPerson(); break; // // Read content default: ISyndicationContent content = await reader.ReadContent(); break; } } } }
public async Task <IEnumerable <IAtomEntry> > ReadEntriesAsync( Uri feedUrl, long?from, string feedUserName = "", string feedPassword = "", bool embedEvent = true, bool embedObject = true) { var entries = new List <IAtomEntry>(); var embedString = string.Empty; if (embedObject && embedEvent) { embedString = "embed: \"event,object\""; } else if (embedObject) { embedString = "embed: \"object\""; } else if (embedEvent) { embedString = "embed: \"event\""; } _httpClient.DefaultRequestHeaders.Remove("X-Filtering"); if (from.HasValue) { var filter = string.IsNullOrEmpty(embedString) ? $"{{ position: {@from} }}" : $"{{ position: {@from}, {embedString} }}"; _httpClient.DefaultRequestHeaders.Add("X-Filtering", filter); } else { _httpClient.DefaultRequestHeaders.Add("X-Filtering", $"{{ {embedString} }}"); } if (!string.IsNullOrEmpty(feedUserName) && !string.IsNullOrEmpty(feedPassword)) { _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{feedUserName}:{feedPassword}"))); } try { using (var response = await _httpClient.GetAsync(feedUrl)) using (var responseStream = await response.Content.ReadAsStreamAsync()) using (var xmlReader = XmlReader.Create(responseStream, new XmlReaderSettings { Async = true })) { var atomReader = new AtomFeedReader(xmlReader); while (await atomReader.Read()) { if (atomReader.ElementType == SyndicationElementType.Item) { entries.Add(await atomReader.ReadEntry()); } } } } catch (Exception e) { _logger.LogError(e.Message, e); throw; } return(entries); }
/// <summary> /// Reads the Atom feed at <see cref="ReleaseUpdateUri"/> and fills the <see cref="Releases"/> /// collection with information. If a release with higher version number than <see cref="ApplicationVersion"/> /// is found then the <see cref="ReleaseToUpdate"/> is set to this release. /// </summary> /// <param name="force"></param> /// <returns></returns> public async Task <bool> CheckForUpdate(bool force = false) { EnsureUpdateEntry(); if (updateEntry.LastCheck == DateTime.Today && !force) { return(false); } try { using (var cl = new HttpClient()) { var response = await cl.GetAsync(ReleaseUpdateUri); response.EnsureSuccessStatusCode(); using (var xmlReader = XmlReader.Create(await response.Content.ReadAsStreamAsync(), new XmlReaderSettings { Async = true })) { Releases.Clear(); ReleaseToUpdate = null; var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Category: await feedReader.ReadCategory(); break; case SyndicationElementType.Image: await feedReader.ReadImage(); break; case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); var r = new Release(); r.DownloadUri = entry.Links.FirstOrDefault(x => x.RelationshipType == "alternate")?.Uri; if (r.DownloadUri != null) { r.Updated = entry.LastUpdated.ToUniversalTime().LocalDateTime; r.ParsedVersion = ParseVersion(r.DownloadUri.AbsolutePath); if (r.ParsedVersion != null) { Releases.Add(r); } } break; case SyndicationElementType.Link: await feedReader.ReadLink(); break; case SyndicationElementType.Person: await feedReader.ReadPerson(); break; default: await feedReader.ReadContent(); break; } } if (Releases.Count == 0) { return(false); } var top = Releases.OrderByDescending(x => x.ParsedVersion).First(); if (top.ParsedVersion > ApplicationVersion) { ReleaseToUpdate = top; return(true); } } } } catch (Exception ex) { LogException(ex); return(false); } updateEntry.LastCheck = DateTime.Today; SaveUpdateEntry(); return(false); }