erci pour le conseil avec nodemon, je vais regarder ça, ça semble bien utile effectivement ;-)
erci pour le conseil avec nodemon, je vais regarder ça, ça semble bien utile effectivement ;-)
Ok, j'ai ça maintenant :
Donc maintenant, il faut que j'adapte le code pour voir ce que je peux afficher des flux ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 http://www.slate.fr/story/98493/reformes http://www.slate.fr/story/98505/pays-non-colonises-puissances-europeennes http://www.slate.fr/story/98501/mosquees-autriche-financements-etrangers http://www.slate.fr/story/98391/vacances-neige-ski-environnement http://www.slate.fr/story/98497/scene-sexe-cinema http://www.slate.fr/story/98477/rouart-hommage-peintres-meconnus http://www.slate.fr/story/98495/pourquoi-sacha-pokemon http://www.slate.fr/story/98417/brevets http://www.slate.fr/story/98315/aide-france-arabie-saoudite-liban http://www.slate.fr/story/98471/animaux-chien-tres-courte-memoire
Merci beaucoup pour tout, je vais voir si j'arrive à faire ça. RTFM de nouveau ;-)
Il suffit en fait, dans la page test.ejs, de faire ça :
En remplaçant title par une des propriétés disponibles si je comprends bien. Par contre, link, origlink et permalink n'affiche rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <ul> <% for(var i=0; i<items.length; i++) {%> <li><%= items[i].title %></li> <% } %> </ul>
Sur la doc, il y a les meta properties et articles properties. Là, se sont les articles properties que j'affiche non ? J'ai essayé avec meta au lieu de item, mais ça ne fonctionne pas.
Ok, ton parser parse bien le flux rss et te renvoi la liste d'item sous forme d'objet javascript.
Voici un exemple de flux RSS.
Dans la vue on a spécifié qu'on veux afficher le champs link mais maitenant tu peux afficher les autres (title, description, pubDate).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>Mon site</title> <description>Ceci est un exemple de flux RSS 2.0</description> <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate> <link>http://www.example.org</link> <item> <title>Actualité N°1</title> <description>Ceci est ma première actualité</description> <pubDate>Sat, 07 Sep 2002 00:00:01 GMT</pubDate> <link>http://www.example.org/actu1</link> </item> <item> <title>Actualité N°2</title> <description>Ceci est ma seconde actualité</description> <pubDate>Sat, 07 Sep 2002 00:00:01 GMT</pubDate> <link>http://www.example.org/actu2</link> </item> </channel> </rss>
Si tu regarde ton fichier app.js, on a créer une variable "meta"...
Déclare la en global comme "items" puis passe la à la vue (comme items...).
Ensuite tu pourras l'afficher dans la vue.
J'ai essayé de faire avec meta ce que j'ai fais avec item :
Et ma page test.ejs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 // nodemon var express = require('express'); var app = express(); var FeedParser = require('feedparser') var request = require('request'); var req = request('http://www.slate.fr/rss.xml') var feedparser = new FeedParser(); var items = []; var meta = []; req.on('error', function (error) { // handle any request errors }); req.on('response', function (res) { var stream = this; if (res.statusCode != 200) return this.emit('error', new Error('Bad status code')); stream.pipe(feedparser); }); feedparser.on('error', function(error) { // always handle errors }); feedparser.on('readable', function() { // This is where the action is! var stream = this; var meta = this.meta; var item = {}; var meta = {}; while (meta = stream.read()) { meta.push(meta); } while (item = stream.read()) { items.push(item); } }); app.get('/test', function(req, res) { console.log(items); res.render('test.ejs', {items: items}); }); app.get('/', function(req, res) { res.render('index.ejs'); }); app.get('/sous-sol', function(req, res) { res.setHeader('Content-Type', 'text/plain'); res.end('Vous êtes dans le sous-sol'); }); app.get('/etage/salon', function(req, res) { res.render('salon.ejs', {etage: req.params.etagenum}); }); app.use(function(req, res, next){ res.setHeader('Content-Type', 'text/plain'); res.status(404).send('Page introuvable !'); }); app.listen(8080);
Mais j'ai meta is not defined
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <ul> <% for(var i=0; i<meta.length; i++) {%> <li><%= meta[i].link %></li> <% } %> </ul>
dans la page test.ejs
Ok, bon en fait dans le code il y avait la ligne
Donc tu n'avais pas à faire un while avec le stream.read.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2meta = this.meta;
J'ai supprimé 2 déclaration de variables meta en trop dans app.js.
De plus tu n'a pas passé la variable meta à la vue, du coup c'était pas possible de l'afficher.
app.js
Meta semble être un objet, donc au niveau de la vue tu n'a pas besoin de boucler avec un for...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 var express = require('express'); var app = express(); var FeedParser = require('feedparser') var request = require('request'); var req = request('http://www.slate.fr/rss.xml') var feedparser = new FeedParser(); var items = []; var meta = {}; req.on('error', function (error) { // handle any request errors }); req.on('response', function (res) { var stream = this; if (res.statusCode != 200) return this.emit('error', new Error('Bad status code')); stream.pipe(feedparser); }); feedparser.on('error', function(error) { // always handle errors }); feedparser.on('readable', function() { // This is where the action is! var stream = this; meta = this.meta; var item = {}; while (item = stream.read()) { items.push(item); } }); app.get('/test', function(req, res) { console.log(meta); res.render('test.ejs', { items: items, meta: meta }); }); app.get('/', function(req, res) { res.render('index.ejs'); }); app.get('/sous-sol', function(req, res) { res.setHeader('Content-Type', 'text/plain'); res.end('Vous êtes dans le sous-sol'); }); app.get('/etage/salon', function(req, res) { res.render('salon.ejs', {etage: req.params.etagenum}); }); app.use(function(req, res, next){ res.setHeader('Content-Type', 'text/plain'); res.status(404).send('Page introuvable !'); }); app.listen(8080);
test.ejs
Tu semble patoger un peux entre les différents type de données en JavaScript. Essaye peut-être de regarder un peux les tableaux et les objets...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <h2> <%= meta.title %> </h2> <ul> <% for(var i=0; i<items.length; i++) {%> <li><%= items[i].link %></li> <% } %> </ul>
Si je comprends bien, les articles (leur propriétés) et les meta (leur propriétés) sont de 2 types différents, c'est pour cela qu'on y accède pas de la même manière. Je vais regarder les tableaux, objets, etc, ça ne me fera pas de mal effectivement.
Il ne manque pas une virgule après :
En tous cas, merci beaucoup pour toute ton aide, tes conseils et ta patience, ça m'a beaucoup aidé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2meta: meta
Non il ne manque pas de virgule
Les objects javascript s'écrivent comme ca:
On ne met pas de virgule après la dernière propriété et on y accède comme ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var monObject = { propriete1 : "quelque chose", propriete2 : "autre chose", tutu : 1, toto: 3, tata: null };
Il y a plusieurs facons de créer des objets mais celle la est la plus simple à comprendre....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 console.log(monObject.propriete1); console.log(monObject["propriete1"]); console.log(monObject['propriete1']);
D'accord, merci. Il faut vraiment que je regarde les types de données...
Donc, dans la console, je pourrais afficher les propriétés des meta comme cela :
J'avoue que je ne comprends pas trop la différence entre les meta properties et les articles properties de feedparser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 console.log(meta["author"]);
C'est assez simple, si tu regarde le xml d'un rss, la meta semble correspondre à l'intérieur de la balise channel sauf les balises "item" qui sont les items.
Merci pour tout. Je passe en résolu puisque j'ai réussi ce que je voulais.
Je vais bientôt revenir, mon prochain essai, c'est de convertir une page HTML en PDF, via PhantomJS certainement.
Encore merci, et sûrement à bientôt ;-)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager