Les guerres d'un Responsable Informatique

Vous êtes passionnés comme moi de machines basse-consommation, ARM, Atom : rendez visite à mon partenaire !

RSS avec NodeJS Socket.IO et Express

lundi 24 octobre 2011 à 14:00 | Dev
Node.JS Socket.IO

NodeJS le framework javascript côté serveur permet une programmation rapide. J'ai présenté récemment un exemple avec Node.JS, SocketIO et Express utilisant l'API Twitter Stream. Je propose de réaliser un script mettant en oeuvre NodeJS et les flux RSS.

NodeJS pour lire les flux RSS

NodeJS basé sur V8-engine

installation de RSSee une librairie Node.JS

NodeJS permet toutes sortes de réalisation. J'ai déjà présenté plusieurs scripts Node.JS, je vous propose de créer un petit lecteur de flux RSS avec NodeJS.

rss reader with nodejs

Commençons par installer la librairie RSSee, qui permet de lire les flux RSS avec node.js.

npm install rssee easyrss

NodeJS avec RSSee

Après cette installation, voici un premier exemple simple qui affiche les flux RSS brut dans la console :

var rss = require('rssee.js').create({'interval':15}), sys = require('sys'); rss.on('article', function(a) { console.log('Une news : ' + sys.inspect(a)); }); rss.start('http://localhost:8181/rss.xml');
  1. création de l'objet rss avec une vitesse de pooling de 15 sec.
  2. quand on reçoit un nouvel article, on l'affiche dans la console
  3. on démarre l'objet rss en indiquant le flux rss à charger

Le résultat :

[ title: 'Test de flux RSS',
  link: 'http://localhost:8181/1.html',
  description: 'Voilà mon premier test' ]

Socket.IO avec RSSee

Socket.IO vise à rendre les applications temps réel avec tous les navigateurs. Utilisons SocketIO pour envoyer les mises à jours des flux RSS, vers le navigateur web.

Côté serveur, j'envoie le flux rss sur le multiplex 'myrss'. Ainsi, il est possible de gérer plusieurs flux RSS simultanément et de leurs appliquer des traitements différents :

rss.on('article', function(a) { socket.sockets.emit("myrss","â–¸ "+a); console.log(sys.inspect(a)+"\n");

Côté client :

socket.on('myrss', function(json) { console.log("myrss"); console.log(json); $("<li></li>").html(json) .prependTo("#myrss") .css({opacity:0}).slideDown("slow").animate({opacity:1},"slow"); });

NodeJS avec RSSee, SocketIO et un peu de jQuery

Pour cette application Node.JS, je veux m'abonner à 3 flux RSS, les afficher dans 3 zones séparées. J'ajoute une fonction 'linkify', afin de rendre le flux RSS cliquable.

Côté serveur :

var rss1 = require('rssee').create({'interval':30}), rss2 = require('rssee').create({'interval':30}), rss3 = require('rssee').create({'interval':30}), sys = require('sys'), express = require('express'); function linkify(text) { return '<a href="'+text.link+'" target="_blank">'+text.title+'</a>'; } app = express.createServer(); app.configure(function(){ app.use(express.static(__dirname + '/rss')); }); app.get('/', function(req, res, next){ res.render('/rss/index.html'); }); app.listen(8080); console.log('Server running at http://localhost:8080/'); var socket = require('socket.io').listen(app); socket.set('log level', 1); rss1.on('article', function(a) { socket.sockets.emit("hackernews","â–¸ "+linkify(a)); console.log(sys.inspect(a)+"\n"); }); rss2.on('article', function(a) { socket.sockets.emit("lejournaldugeek","â–¸ "+linkify(a)); console.log(sys.inspect(a)+"\n"); }); rss3.on('article', function(a) { socket.sockets.emit("reddit","â–¸ "+linkify(a)); console.log(sys.inspect(a)+"\n"); }); rss1.start('http://news.ycombinator.com/rss'); rss2.start('http://feeds.feedburner.com/LeJournalduGeek'); rss3.start('http://www.reddit.com/.rss');

Côté client :

(function(document, window, undefined) { var script = document.createElement("script"); script.src = "http://code.jquery.com/jquery.min.js"; script.onload = function() { $.getScript("http://127.0.0.1:8080/socket.io/socket.io.js", function() { var socket = io.connect('http://127.0.0.1:8080'); socket.on('hackernews', function(json) { console.log("hackernews"); console.log(json); $("<li></li>").html(json) .prependTo("#hackernews") .css({opacity:0}).slideDown("slow").animate({opacity:1},"slow"); }); socket.on('lejournaldugeek', function(json) { console.log("lejournaldugeek"); console.log(json); $("<li></li>").html(json) .prependTo("#lejournaldugeek") .css({opacity:0}).slideDown("slow").animate({opacity:1},"slow"); }); socket.on('reddit', function(json) { console.log("reddit"); console.log(json); $("<li></li>").html(json) .prependTo("#reddit") .css({opacity:0}).slideDown("slow").animate({opacity:1},"slow"); }); socket.on("disconnect", function() { console.log("disconnected"); }); }); }; document.getElementsByTagName("head")[0].appendChild(script); })(document, window); RSS Reader with Node.JS

Notre application Node.js est pleinement fonctionnelle ! L'auteur de RSSee, propose sur GitHub un générateur de flux RSS pour tester RSSee. Pour le rendu global de l'application, je m'appuie sur ExpressJS.

Vous pouvez télécharger mon application Node.JS RSS Reader.

A propos de Vincent RABAH

Directeur des systemes d'information

DSI/Responsable Technique depuis plus de 10 ans. Les Systèmes d'Informations complexes sont mon quotidien !
Expert en management, GreenIT et virtualisation de serveurs. Vous pouvez consulter l'ensemble de mon parcours.

I do speak English even if my blog is written in French ... Feel free to leave comments, I'll answer you !


Partagez cet article :



Fil des commentaires de cet article

2 commentaire(s) Commentaires »

  1. Hi Ty, I just forgot to add you need to install easyrss too with : npm install easyrss !

    Regards,
    Vince

  2. I'm getting an error when install using npm install rssee.

    npm ERR! Doesn't exist: git://github.com/jheusala/node-easyrss.git

Laisser un Commentaire

Quelle est la première lettre du mot vkdo ? :