[.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] Créer un flux RSS à l’aide du Framework 3.5
Dans un précédent post, j’ai montré comment à l’aide du Framework 3.5 il était possible de consommer un flux RSS. A présent, nous allons voir comment créer un flux RSS à l'aide de ces outils du Framework.
Tout d’abord il faut ajouter la référence System.ServiceModel.Web à notre projet.
Un flux RSS est représenté par la classe SyndicationFeed. Grâce à cette classe, nous allons pouvoir spécifier le titre, la description, les items, etc… qui composent notre flux.
SyndicationFeed feed = new SyndicationFeed();
Nous allons créer nos items qui seront contenus dans le flux. Pour cela, nous allons créer une liste de SyndicationItem qui seront la représentation de nos items dans le flux RSS. On pourra spécifier pour chaque item : le nom, la description, le lien, etc…
feed.Description = new TextSyndicationContent("Ceci est mon flux RSS de test");
feed.Title = new TextSyndicationContent("Flux RSS de test");
List<SyndicationItem> lstItems = new List<SyndicationItem>();
lstItems.Add(new SyndicationItem("Premier item", "Ceci est mon premier item", new System.Uri(http://www.dotnet-france.com/item1)));
lstItems.Add(new SyndicationItem("Second item", "Ceci est mon second item", new System.Uri(http://www.dotnet-france.com/item2)));
Une fois les items tous créés, il faut les ajouter au flux :
feed.Items = lstItems;
Ensuite, il faut pouvoir formatter le flux de telle sorte qu’il soit interprétable par le navigateur.
On peut, par l’intermédiaire d’un “formatter” transposer notre flux en Atom 1.0 ou RSS 2.0.
Pour cela, on créé un objet de type Atom10FeedFormatter ou Rss20FeedFormatter.
Dans cet objet nous allons charger le flux à interpréter :
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
ou
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
Voilà, il ne reste plus qu’à exposer le flux RSS précédemment créé afin qu’il soit visible aux utilisateurs !
Pour cela, il existe plusieurs méthodes :
- Utilisation d’un service avec l’aide d’un ServiceSyndicationLibrary (depuis le Framework 3.5)
- Utilisation d’un HttpHandler (expliqué dans le prochain post)