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
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
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.
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');
- création de l'objet rss avec une vitesse de pooling de 15 sec.
- quand on reçoit un nouvel article, on l'affiche dans la console
- 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);
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
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 !
- StatusDashboard monitoring avec Node.js
- Syntax highlight en PHP avec GeSHI
- Un SlideShow 3D avec HTML5 et CSS3
- Gestion des plugins VIM
- Node.js v0.6.0 est sorti
- Node.js v0.6.1 pour Linux, Windows, MacOS
- Twitter Stream avec NodeJS Socket.IO et Express
- Google Analytics en Ruby
- Vim-css-color plugin
- Sauvegarder Active Directory et le serveur DHCP
Vous pouvez lire également :
Partagez cet article :





Hi Ty, I just forgot to add you need to install easyrss too with : npm install easyrss !
Regards,
Vince
I'm getting an error when install using npm install rssee.
npm ERR! Doesn't exist: git://github.com/jheusala/node-easyrss.git