using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DatasourceAdapter
{
public class DatasourceRepository
{
public async Task<IEnumerable<NewsItem>> GetRssFeed(string url)
{
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
using (var content = await response.Content.ReadAsStreamAsync())
{
var doc = XDocument.Load(content);
var items = doc.Descendants(XName.Get("item"));
return items.Select(x => {
var title = x.Descendants().FirstOrDefault(e => e.Name == "title")?.Value;
var description = x.Descendants().FirstOrDefault(e => e.Name == "description")?.Value;
var link = x.Descendants().FirstOrDefault(e => e.Name == "link")?.Value;
DateTime.TryParse( x.Descendants().FirstOrDefault(e => e.Name == "pubdate")?.Value, out var date);
var image = x.Descendants().Where(e => e.Name == "enclosure")
.Where(e => e.Attributes(XName.Get("type")).Any(a => a.Value.IndexOf("image") >= 0))
.Select(e => e.Attributes(XName.Get("url")).Select(a => a.Value).FirstOrDefault())
.FirstOrDefault();
var categories = x.Descendants().Where(e => e.Name == "category").Select(e => e.Value).ToList();
return new NewsItem() {
Title = title,
Description = description,
Link = link,
Date = date,
Image = image,
Categories = categories
};
}).ToList();
}
}
}
}
414600cookie-checkC# parse XML/RSS