Skip to main content

Tutoriel: Insérer un flux RSS dans une page ASP.net

Nous allons ici voir comment rapidement incorporer un flux RSS dans un formulaire Web ASP.net. Plus exactement, nous allons nous abonner à un flux Atom.

Le but est d'afficher en tant que HTML les titres des entrées du flux, avec les liens vers les articles, et d'incorporer le tout au formulaire Web, comme je le fais sur ma page:

Dans cet exemple, nous prendrons le flux RSS provenant de l'URL http://arnaudweil.blogspot.com/rss.xml.

Puisque le RSS est du XML, nous allons facilement pouvoir le transformer en HTML grâce au contrôle ASP.net Xml et à une transformation XSLT.

Dans ma page blog.aspx, j'écris donc:

<asp:Xml ID="Xml1" runat="server" TransformSource="~/rss2table.xsl" />

Il me faut ensuite créer la transormation XSLT. J'ajoute donc à la racine de mon site un fichier rss2table.xsl avec le contenu suivant (cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de Solutions de Visual Studio et choisissez "Ajouter un nouvel élément" puis "Fichier XSLT"):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/atom:feed">
<table>
<tr>
<th>Titre</th>
<th>Date</th>
</tr>
<xsl:apply-templates select="atom:entry" />
</table>
</xsl:template>
<xsl:template match="atom:entry">
<tr>
<td>
<a href="{atom:link[@rel='alternate']/@href}">
<xsl:value-of select="atom:title"/>
</a>
</td>
<td>
<xsl:value-of select="substring(atom:published,0,11)"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>

Il ne reste qu'un détail: le contrôle XML doit récupérer le flux RSS. Mais il ne sait que travailler avec un document XML local ou une chaîne. Aucun problème, il est très facile de faire une requête HTTP avec le framework .net. J'ajoute donc au code de ma page (blog.aspx.cs) le code suivant:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
WebRequest r = HttpWebRequest.Create("http://arnaudweil.blogspot.com/rss.xml");
WebResponse re = r.GetResponse();
using (StreamReader sr = new StreamReader(re.GetResponseStream()))
{
Xml1.DocumentContent = sr.ReadToEnd();
}
}
}

Et c'est tout! Facile, n'est-ce pas?

Comments

danisti said…
Hello,

j'essaie de faire fonctionner ton example mais je ne vois jamais tomber la balise /atom:feed dans ton flux xml. J'ai raté qlq chose ou bien il y a un problème?

Merci d'avance

dan
Arnaud said…
Bonjour Dan,

Regarde en haut du flux, il doit y avoir une directive
xmlns:atom='http://www.w3.org/2005/Atom'

Sauf que c'est sûrement autre chose que "atom". Il suffit de remplacer "atom" par cet autre chose dans le XSL/T que je fournis.

Par exemple, s'il y a:
xmlns:toto='http://www.w3.org/2005/Atom'

alors le:
match="atom:entry"
devient:
match="toto:entry"

Est-ce que ça résout ton problème?
danisti said…
houuula...
Milles excuses, je pensais mal au sujet du xsl. C'est un langage à part entière pour xslt et je débute.
En fait, le flux que je voulais segmenter ne correspond apparemment pas à cette "atomisation?". En tous cas, il ne contient que du xml assez simple et similaire à ton flux, si ce n'est pour les balises atom...
J'ai combiné ton code avec celui de la MSDN et avec un bête foreach, je traite les balises qui m'intéressent dans le flux et les affichent en tableau, avec lien sur le titre. J'ai juste fait appel aux balises du xml d'entrée.

Merci pour ton exemple, mais force est de constater que je n'ai pas bien compris ta réponse :-D

Dan
Arnaud said…
Désolé si la réponse n'était pas claire...

En utilisant XSLT pour transformer la source (du XML) en HTML, je souhaite éviter d'écrire du code .NET pour cela. Mais rien n'empêche d'en écrire, comme tu l'as finalement fait.

Je suis quand même curieux de connaître le flux que tu voulais convertir... tu me donnes l'URL? Par e-mail, si tu ne veux pas qu'elle apparaisse ici.
danisti said…
Je n'ai pas eu à écrire plus de code c#, c'est ça qui est cool!

Ton exemple m'a bien servi, surtout pour les appels aux fonctions de requêtes web pour la mise à jour du contrôle asp et pour la création du xsl (il me manquait System.Net mais VS m'a vite fait indiqué le using manquant). Je n'ai fait que modifier celui-ci d'ailleurs, pour lui faire afficher les balises "item" et leurs enfants, sous la forme du tableau de lien que tu montrais.

Tiens, c'est du xml tt bête : http://fr.audiofanzine.com/news/partenaires/rss.xml
Arnaud said…
Eh bien je suis content de savoir que tu aies réussi, et que c'est en modifiant le XSL/T... car c'est bien ce qu'il fallait faire.

En fait, mon exemple montre comment traiter un flux Atom, pas un flux RSS, mais c'est presque la même chose.

Sinon, il y a aussi l'option d'appliquer une autre transformation XSLT/T, qui est données ici, pour convertir le RSS en Atom, puis d'appliquer le XSL/T que je donne...
danisti said…
hmmm, j'avoue que l'intéret de la réutilisabilité se manifeste sur ce point : la possibilité d'appliquer un même modèle pour transformer n'importe quel flux, qu'il soit bêtement RSS ou bien qu'il soit conforme à une nomenclature précise telle que celle des flux Atom, dont je n'avais pas connaissance jusqu'à présent, m'interpelle. Je vais voir si je peux mettre ça en application avec des webforms pour permettre à mes utilisateurs de se créer un zône de contenu dynamique à partir de n'importe quelle source d'info, à la gmail.

Merci en tous cas pour ces exemples. Si ça créé du besoin, c'est que c'est bon!

Tschuss

Dan

Popular posts from this blog

Gift idea : help your loved ones take their IT skills to the next level

You surely know a special person who works in IT. Learn Kubernetes & Docker enables them to quickly ramp up on those two technologies that one doesn't want to miss in 2021. With smoother operations, better scaling and availability, DevOps tooling, containers and containers orchestration smartly solve many problems that developers and system administrators commonly face. Don't let your loved ones face problems in their IT job : offer them the book that takes them from zero to productive in a matter of days. Grab it now! Get the ebook from Leanpub , Amazon or choose from many retailers . Get the print edition from Lulu .  

Learn Meteor book available

I'm pleased to announce the general release of my Learn Meteor book. It is now available as an ebook or print book from various sources: Learn Meteor print (paperback) on Lulu Learn Meteor ebook on LeanPub Learn Meteor ebook on Barnes & Noble Learn Meteor ebook on iBooks Learn Meteor ebook on Kobo Learn Meteor ebook on Scribd Learn Meteor ebook on Inktera Page Foundry Learn Meteor ebook on 24symbols Learn Meteor ebook on Amazon US Learn Meteor ebook on Amazon UK Learn Meteor ebook on Amazon France Learn Meteor ebook on Amazon Deutschland Learn Meteor ebook on Amazon Canada Learn Meteor ebook on Amazon India Learn Meteor ebook on Amazon Brasil Learn Meteor ebook on Amazon Mexico Learn Meteor ebook on Amazon España Learn Meteor ebook on Amazon Italia Learn Meteor ebook on Amazon Netherlands Learn Meteor ebook on Amazon Japan Learn Meteor ebook on Amazon Australia More sources are coming soon for the print version. Learn Meteor has been a fun expe...

Learn ASP.NET Core: read the book as it is being written

     TL;DR: get the discounted book now using the coupon , then get the full version for free. Thanks to the great acceptance of my previous books, ( Learn WPF MVVM ,  Learn ASP.NET MVC and Learn Meteor ), I'm in the process of writing a fourth one. Learn ASP.NET Core - MVC and DI with .NET Core 1.1 using Visual Studio 2017 teaches you how to quickly get coding using that technology. Just as I did previously, I'm publishing it before it is even finished. Would you like to read it? You can get it for half the price: 50% off the book using that coupon (limited to the first 100 readers and up to august 1st 2017): http://leanpub.com/netcore/c/K9mHH0IzfI2F About 50% of the book is already written, yet it is already available for download as an ebook: PDF, EPUB, MOBI: you choose your format. Over the next days I'll be writing the rest of the book, and publishing updates often. The final book will be ready by au...