Comment créer un lecteur RSS en Javascript? [How to create a RSS reader in JavaScript?]

Capture d'écran de Red Feed Aggregator (RSS reader) créé par Julien Gouesse [Screenshot of Red Feed Aggregator (RSS reader) created by Julien Gouesse]
Français English
Sommaire :

Summary:

Définition

Definition

Un agrégateur de nouvelles, également appelé un agrégateur de flux, lecteur de flux, lecteur de nouvelles, lecteur RSS ou simplement agrégateur, est un logiciel client ou une application web qui regroupe en un seul endroit des contenus web syndiqués tels que des journaux en ligne, des blogs, des podcasts et des blogs vidéo (vlogs) pour en faciliter la consultation 1. A news aggregator, also termed a feed aggregator, feed reader, news reader, RSS reader or simply an aggregator, is client software or a web application that aggregates syndicated web content such as online newspapers, blogs, podcasts, and video blogs (vlogs) in one location for easy viewing 1.
Cela peut être un puissant outil de veille et c’est encore très utilisé par des journalistes. It can be a powerful monitoring tool and is still widely used by journalists.

Pourquoi?

Why?

Premièrement, j’y vois une alternative aux lettres d’information. L’agrégateur de nouvelles permet de suivre une site web sans donner une adresse email, cela élimine une source potentielle de pourriels. At first, I see it as an alternative to newsletters. The news aggregator allows to follow a website without giving an email address, this eliminates a potential source of spam.
Deuxièmement, j’y vois surtout une alternative aux fils d’actualité des réseaux asociaux sous contrôle impérialiste dont celui de Facebook. L’ordre d’apparition des actualités ne dépend plus du bon vouloir d’une entreprise privée, il dépend des fonctionnalités de l’agrégateur et de leur utilisation, il est souvent possible de les trier par ordre chronologique et par flux. A mon humble avis, utiliser Facebook pour informer et s’informer est une bêtise puisque ce dernier peut manipuler les fils d’actualité à sa guise, il peut cacher certaines activités, il peut insérer des publicités entre deux actualités et il peut mettre en avant des actualités en fonction de ses propres priorités. Par exemple, il peut cacher ou rendre moins accessibles des publications qui n’encouragent pas les utilisateurs à cliquer sur ses publicités, il peut favoriser ses clients qui payent pour être mieux mis en avant. A quoi bon avoir des tonnes d’abonnés s’ils ne voient pas ou très peu les contenus des pages et des personnes auxquelles ils s’abonnent? Secondly, I see it above all as an alternative to the news feeds of asocial media under imperialist control, such as Facebook. The order in which the news items appear no longer depends on the goodwill of a private corporation, it depends on the aggregator’s features and their use, it’s often possible to sort them by chronological order and by feed. In my humble opinion, using Facebook to inform and inform oneself is a stupidity since the latter can manipulate the news feeds as it pleases, it can hide certain activities, it can insert ads between two news items and it can highlight news items according to its own priorities. For example, it can hide or make less accessible publications that don’t encourage users to click on its ads, it can favour its customers who pay to be better promoted. What’s the point of having tons of subscribers if they don’t see or see very little of the content of the pages and people they subscribe to?

Comment?

How?

J’ai trouvé deux articles à ce sujet 23 il y a quelques mois, cela semblait presque trop simple. Lorsque j’ai essayé d’utiliser le code source du projet mentionné dans le premier article, j’ai obtenu le message d’erreur « l’en-tête CORS ‘Access-Control-Allow-Origin’ est manquant » 4. Bien évidemment, je ne peux pas modifier cela sur chaque serveur. Deux solutions s’offraient à moi, soit je consommais le flux RSS et je produisais du XML ou du JSON sur mon serveur, soit j’utilisais un proxy CORS. J’ai déjà implémenté des services web REST similaires à la première solution avec JAX-RS, je voulais faire le moins de choses possibles côté serveur donc j’ai opté pour la seconde solution. J’utilise temporairement le proxy CORS appelé AllOrigins 5. I found two articles on this subject 23 several months ago, it seemed to be almost too simple. When I tried to use the source code of the project mentioned in the first article, I got the error message « CORS header ‘Access-Control-Allow-Origin’ missing » 4. Obviously, I can’t modify this on every server. There were two solutions, either I consumed the RSS feed and produced XML or JSON on my server, or I used a CORS proxy. I already implemented REST web services similar to the first solution with JAX-RS, I wanted to do as little as possible on the server side. Therefore, I opted for the second solution. I’m temporarily using the CORS proxy named AllOrigins 5.
Comme je voulais rendre le projet plus facile à utiliser, j’ai intégralement réécrit le code Javascript pour qu’il puisse fonctionner sur d’anciennes versions de Firefox for Android (et accidentellement sur Microsoft Internet Explorer 11), j’ai rajouté quelques commentaires, j’ai ajouté un descripteur de déploiement (web.xml) et enfin, j’ai ajouté un script Ant (build.xml) pour construire le WAR, changer le propriétaire des fichiers (l’utilisateur de SFTP est root, le serveur web ne doit pas tourner en tant que root pour des raisons de sécurité) et téléverser les fichiers sur le serveur. Les URLs sont codés en dur dans un fichier JSON pour le moment mais j’arrangerai cela dans les semaines à venir. Le code source est ici 6. As I wanted to make the project easier to use, I completely rewrote the Javascript code so that it could run on older versions of Firefox for Android (and accidentally on Microsoft Internet Explorer 11), I added some comments, I added a deployment descriptor (web.xml) and finally, I added an Ant script (build.xml) to build the WAR, change the owner of the files (the SFTP user is root, the web server mustn’t run as root for security reasons) and upload the files to the server. The URLs are hardcoded in a JSON file for the moment but I’ll fix this in the coming weeks. The source code is here 6.
Vous pourrez utiliser mon tutoriel sur l’auto-hébergement 7 si vous partez de zéro avec un serveur que vous voulez mettre sous GNU Linux. You’ll be able to use my tutorial about self-hosting 7 if you start from scratch with a server that you want to run under GNU Linux.

Conclusion

Conclusion

N’hésitez pas à me contacter 8 si vous avez des questions ou des suggestions. J’espère que mon code source vous sera utile. En tout cas, mon projet fonctionne, je n’ai pas écrit un article volontairement trompeur pour faire du clic et du fric. La publicité en ligne nuit à Internet, elle est absente de mon blog. Don’t hesitate to contact me 8 if you have some questions or some suggestions. I hope that you’ll find my source code useful. Anyway, my project works, I didn’t write a deliberately misleading article to make clicks and money. Online advertising harms the Internet, it’s absent from my blog.
P.S : Entre temps, j’ai ajouté le support partiel des formats Atom et OPML. P.S: In the meantime, I’ve added partial support for Atom and OPML formats.

Références

References

[1]Article de Wikipédia sur les agrégateurs de nouvelles
[2]« Comment créer une app de lecture RSS en JavaScript » sur Hongkiat
[3]« Comment récupérer et analyser des flux RSS en JavaScript » sur CSS-Tricks
[4]« Raison : l’en-tête CORS ‘Access-Control-Allow-Origin’ est manquant » sur MDN
[5]proxy CORS All Origins
[6]Red Feed Aggregator
[7]« L’auto-hébergement : Pourquoi? Comment? »
[8]Contact
[1]Wikipedia article about the news aggregator
[2]« How to Create a RSS Reader App in JavaScript » on Hongkiat
[3]« How to Fetch and Parse RSS Feeds in JavaScript » on CSS-Tricks
[4]« Reason: CORS header ‘Access-Control-Allow-Origin’ missing » on MDN
[5]CORS proxy All Origins
[6]Red Feed Aggregator
[7]« Self-hosting: Why? How? »
[8]Contact
Licence Creative Commons
Les photos de cet article sont mises à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 3.0 non transposé
Creative Commons License
The photos of this article are licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License
Licence Creative Commons
Cet article est mis à disposition selon les termes de la Licence Creative Commons Attribution – Pas d'Utilisation Commerciale – Partage à l'Identique 3.0 non transposé
Creative Commons License
This article is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
Auteur : Julien Gouesse Author: Julien Gouesse
Publié dans Politique, syndicalisme et vie associative | Tagué