[.NET] Exposer un flux RSS à l’aide d’un HttpHandler
Dans un précédent post, j’avais montré comment créer un flux RSS à l’aide du Framework 3.5.
A présent, nous allons voir comment exposer un flux RSS à l’aide d’un HttpHandler.
Lors d’une requête HTTP en ASP.NET une page ASPX est demandée au serveur. Dans le cas d’un HttpHandler, ce n’est plus une page qui est demandée mais une classe.
Dans un premier temps, il faut préciser à notre application ASP.NET quelle classe devra être appelée lorsque notre requête HTTP sera traitée. Pour cela, nous devons ajouter dans le fichier de configuration de notre application les éléments suivants :
<httpHandlers>
<add verb="*" path="rssfeed.axd" validate="true" type="Syndication.RssFeedHandler"/>
</httpHandlers>
L’attribut “path” indique l’url relative de la requête qui renverra vers le traitement de notre classe.
L’attribut “type” indique le nom de notre classe qui sera traitée.
Passons maintenant à la création de notre classe qui sera appelée lors du traitement de la requête. Cette classe doit implémenter l’interface IHttpHandler contenant les méthode IsReusable et ProcessRequest.
C’est dans la méthode ProcessRequest que se fera tout le traitement. En effet, elle prend en paramètre le contexte HTTP à de la requête.
Pour exposer notre flux RSS, il va donc faloir écrire le flux XML dans la réponse renvoyée au navigateur du client. Pour cela, nous allons créer un XmlWriter qui écrira dans le flux de sortie de la réponse envoyée au client :
XmlWriter wr = XmlWriter.Create(context.Response.OutputStream);
Il suffit ensuite de créer notre flux RSS (voir ce post) et de l’écrire dans notre XmlWriter.
/*
Voir post précédent pour la création du flux
*/Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
formatter.WriteTo(wr);
wr.Flush();
wr.Close();
Désormais, lorsque l’on navigue vers l’URL : http://monsite.fr/rssfeed.axd, notre flux rss s’affiche correctement.
Il est possible ensuite d’apporter des améliorations à notre flux RSS. Par exemple, la possibilité à l’utilisateur de choisir le format (RSS 2.0 ou Atom 1.0) de son flux.
Pour cela, nous allons prendre en compte la valeur d’un paramètre passé dans l’URL afin de choisir le formattage du flux :
http://monsite.fr/rssfeed.axd?format=rss ou http://monsite.fr/rssfeed.axd?format=atom
Une petite modification est à faire dans le code de notre classe appelée pour traiter la requête :
if (context.Request.QueryString["format"].Equals("rss"))
{
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
rssFormatter.WriteTo(wr);
}
else if (context.Request.QueryString["format"].Equals("atom"))
{
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
atomFormatter.WriteTo(wr);
}
[.NET]Consommer un flux RSS à l’aide du Framework 3.5
Le Framework 3.5 met à notre disposition des outils très simple d’utilisation afin de consommer un flux RSS. Il nous sera alors possible de l’exploiter à notre guise dans notre code.
Un flux RSS est représenté dans le Framework 3.5 par la classe SyndicationFeed.
Attention : Il faut ajouter la référence System.ServiceModel.Web à votre projet pour utiliser les objets qui sont explicités dans cet article. Les objets permettant de manipuler les flux RSS sont issus de l'espace de nom suivant :
using System.ServiceModel.Syndication;
Tout d’abord, il faut récupérer le flux RSS à charger. Pour cela nous allons utiliser un objet de type XmlReader. Nous allons créer ce XmlReader en appelant la méthode statique Create prenant en paramètre un string correspondant à l’URI du flux à récupérer.
XmlReader reader = XmlReader.Create("http://blogs.dotnet-france.com/rss.axd");
Pour charger un flux RSS, on va utiliser la méthode statique Load de la classe SyndicationFeed qui prend en paramètre un objet de type XmlReader correspondant au flux RSS à charger.
SyndicationFeed feed = SyndicationFeed.Load(reader);
Notre objet SyndicationFeed possède une propriété Items de type IEnumerable<SyndicationItem>. On va pouvoir venir itérer sur cette propriété afin de récupérer le contenu du flux comme par exemple tous les titres des articles des blogs, etc…
IEnumerable<string> lstTitresArticles =
(from i in feed.Items
select i.Title.Text);
Je ne vais pas détailler toutes les propriétés de chaque item, mais il vous est possible entre autre de récupérer la date de publication, le titre, le résumé, les catégories, les liens, etc...
[Perso]La certification ASP.NET 3.5 dans l’escarcelle !!
Et voilà, après 4 mois de travail acharné sur le projet de plateforme de formation à distance pour la Communauté Européenne, je viens de réussir la certification ASP.NET 3.5 !
Me voilà donc MCTS Microsoft .NET Framework 3.5, ASP.NET Application Development.