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

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 experienc

Learn ASP.NET Core MVC book: published

As promised, the Learn ASP.NET Core MVC - Be ready next week using Visual Studio 2017  book is out today. You know nothing to ASP.NET Core but need to start coding your next application within a week. Don't worry: this book has you covered. Get your copy now: ebook on Leanpub , Amazon  (also in your local Amazon store), Kobo , Barnes&Noble Nook , Google Play , iBooks , 24symbols , Inktera , Scribd, Playster , Tolino, OverDrive, Bibliotheca Paperback on Lulu (soon available with other retailers) More about the book: You're a developer who knows nothing about ASP.NET Core MVC. Which is fine, except that you need to start coding your next application using ASP.NET Core 1.1 MVC and Visual Studio 2017.  Don't worry: I have you covered. I've been training hundreds of developers like you during 15 years, and converted my experience into this book. I know from experience teaching what takes more time to learn in ASP.NET Core MVC, and will spend time only