Vous pouvez utiliser LINQ to XML pour lire un flux RSS WordPress.
Obtenez d'abord le flux. Créez une instance d'Uri.
var rssFeed = new Uri("http://cgeers.com/feed/");
Effectuez ensuite une requête GET.
var request = (HttpWebRequest) WebRequest.Create(rssFeed);
request.Method = "GET";
var response = (HttpWebResponse) request.GetResponse();
Obtenez le flux de réponses et lisez-le pour télécharger le contenu du flux. Toujours dans l'instruction ci-dessus, utilisez LINQ to XML pour analyser le contenu téléchargé et extraire les informations dont vous avez besoin.
var document = XDocument.Parse(feedContents);
var posts = (from p in document.Descendants("item")
select new
{
Title = p.Element("title").Value,
Link = p.Element("link").Value,
Comments = p.Element("comments").Value,
PubDate = DateTime.Parse(p.Element("pubDate").Value)
}).ToList();
Vous pouvez maintenant parcourir les résultats.
foreach(var post in posts)
{
Console.WriteLine(post.Title);
Console.WriteLine(post.Link);
Console.WriteLine(post.Comments);
Console.WriteLine(post.PubDate);
}
Ici, je viens d'utiliser un type anonyme pour capturer la sortie, mais ne hésitez pas à créer votre propre classe BlogPost ou quelque chose de similaire que vous pouvez utiliser dans la requête LINQ.
Je suis habitué à C#, c'est pourquoi je l'ai utilisé dans ma réponse. Mais vous pouvez facilement le convertir. Il y a quelques online converters que vous pouvez utiliser.
En ce qui concerne votre problème avec le DataSet (que je n'utiliserais personnellement pas pour implémenter cela), il est causé par un élément (blog) ayant des nœuds avec le même nom.
Par exemple:
<comments>...</comments>
<slash:comments>5</slash:comments>
Bien sûr, le second a un espace de noms différent (slash), mais la méthode ReadXml (...) de DataSet ne se soucie pas namespaces. Il essaie de créer une deuxième colonne nommée "commentaires". C'est pourquoi vous obtenez l'exception.
Vous pouvez toujours utiliser un DataSet/DataTable si vous le souhaitez. Il suffit d'extraire les données du flux en utilisant LINQ to XML comme indiqué ci-dessus.
Créez ensuite un DataSet et ajoutez-lui une nouvelle table.
var dataSet = new DataSet();
var blog = new DataTable("Blog");
blog.Columns.Add("Title", typeof(string));
blog.Columns.Add("Link", typeof(string));
blog.Columns.Add("Comments", typeof(string));
dataSet.Tables.Add(blog);
itérer sur les données extraites et l'ajouter à la DataTable: méthode
foreach (var post in posts)
{
var newRow = blog.NewRow();
newRow["Title"] = post.Title;
newRow["Link"] = post.Link;
newRow["Comments"] = post.Comments;
blog.Rows.Add(newRow);
}
Voila, nous avons maintenant fixé votre problème en ne se fondant sur ReadXml (...) du DataSet. Téléchargez le flux, extrayez les données qui vous intéressent et persistez.
Merci! C'est beaucoup mieux que d'utiliser une table de données. Y at-il un moyen de trier les messages par date (juste pour être sûr que les messages les plus courants sont en haut)? – Zishan
@Christophe: nous avons RSS intégré dans la bibliothèque de classes de base depuis .NET 3.5. Vous pouvez charger le RSS avec deux lignes de code. –
@Zishan: Bien sûr, il suffit de trier le message IEnumerable (par exemple posts.OrderByDescending (p => p.PubDate);) –