Insérer un flux RSS dans LibreOffice Impress
LibreOffice Impress peut servir de borne d'affichage dynamique sous Linux, en s'appuyant notamment sur sambaedu, mais ce qu'il lui manque dans ce cas, c'est la possibilité d'insérer des flux en provenance de sources externes (sites internet etc.)
En effet, afficher des images et du texte, c'est bien. Mais afficher en plus automatiquement des informations, la météo, l’éphéméride, des blagues... C'est mieux !
Je me suis aperçu aujourd'hui que LibreOffice Calc possédait un menu feuille / Lien vers des données externes. Ce menu permet de récupérer des données d'un tableau présent sur une page web quelconque, exemple :
Génial, LibreOffice permet de récupérer des données sur internet, je ne le savais pas. De même qu'il est possible de choisir de mettre à jour les données automatiquement toutes les 10 secondes par exemple.
Bon j'ouvre calc, j'effectue quelques essais, notamment sur la page au hasard de wikipedia
Cela fonctionne, j'arrive aussi à récupérer les blagues du site http://www.cteblague.com/uneblagueauhasard.
Problème, la mise en page est parfois moche (il y a plein de lignes jaunes indésirables quand sur la page web il n'y a pas de tableau à proprement parlé) et les lignes de caractère dépassent largement l'écran. Attention c'est parce que la fonctionnalité "source externe" est pensée "tableur", autrement dit pour des chiffres et des toutes petites chaînes de caractères (qui a dit twitter ? ^ ^).
Et de toute façon, je ne cherche pas un tableau dans Calc, mais une ou deux lignes dans Impress ! Personnellement je préfère les blagues aux tableaux de valeurs, et c'est là que je me suis souvenu d'un ancien billet sur les "Chuck Norris facts". Je vais donc faire mes essais sur ma machine Linux en local avec Chuck ^ ^
Les manipulations qui vont suivre ont été réalisées sous Linux, mais les scripts peuvent être probablement adaptés à MacOS (qui est certifié Unix après tout) et même à Windows 10 via le nouveau bash linux (non testé)
A savoir qu'en générant des pages html à la volée sur un serveur web linux, les utilisateurs Mac, Windows et Linux pourront indifféremment et facilement profiter des flux RSS dans leur logiciel (le chemin est le même).
Installation de fortune : sudo apt-get install fortune
Téléchargement des facts Chuck Norris, décompression sur le bureau
Copie des données dans le bon dossier : sudo cp Bureau/chuck_norris* /usr/share/games/fortunes/
Test : fortune -e chuck_norris
Bon, jusque là, ça fonctionne.
Je créé un premier script qui permet d'enregistrer une nouvelle blague toutes les 10 secondes dans un fichier :
#!/bin/sh
while true; do
fortune -e chuck_norris >/home/fred/fortune.txt
sleep 10
done
J'ouvre Calc, j'essaie d'importer mon flux de blagues via le fichier, ça ne fonctionne pas. Je réfléchis et je me dis qu'il faut que le fichier soit de type HTML contenant au minimum un tableau (d'une case).
Du coup je rallonge mon script, je rajoute à ce dernier les balises <html> et <table>. Cela me rappelle mes cours d'informatique que j'ai passés au millénaire dernier...
Youpie, ça fonctionne ! Enfin presque, ça fonctionnerait parfaitement en anglais. Pourquoi ? Le flux passe bien mais j'ai un problème d'accent (ah le français et l'informatique...)
Je fais quelques recherches sur internet et je rajoute à mon script une conversion de caractères UTF8 <-> ISO-8859-15. Super, j'ai mes accents !
Autre problématique, il arrive que les blagues dépassent très largement l'écran (elles sont brutes de décoffrage, sur une seule ligne).
Je me dis qu'il faut que je fasse moi-même mes propres découpages de textes dans des tableaux de mes pages web afin de faire tenir des flux entiers sur la page.
J'ai alors l'idée de rechercher dans les flux les "virgules", les "points", les "deux petits points" et les "retours à la ligne" pour y ajouter des changements de cellule vers le bas (équivalent à l'écran d'un retour chariot)
Voici mon script final :
#!/bin/bash
while true; do
echo "<html><table><tr>" >/home/fred/fortune.html
fortune -e chuck_norris >/home/fred/chuck.txt
sed -i -e "s/,/,<\/tr><tr>/g" chuck.txt
sed -i -e "s/\./\.<\/tr><tr>/g" chuck.txt
sed -i -e "s/\:/\:<\/tr><tr>/g" chuck.txt
sed -i.BAK ':z;N;s/\n/<\/tr><tr>/;bz' chuck.txt
iconv -f UTF-8 -t ISO-8859-15 /home/fred/chuck.txt >>/home/fred/fortune.html
echo "</tr></table></html>" >>/home/fred/fortune.html
sleep 10
done
D'accord, cela fonctionne pour Calc, j'en profite pour enregistrer le fichier. Mais pour Impress alors ? Je m'empresse d'aller vérifier tout cela... (oh le joli jeu de mots)
Impress n'a pas par défaut de menu "feuilles", normal ce n'est pas un tableur. Mais Impress permet d'importer un tableau Calc !
Pour se faire, il faut aller dans le menu insertion / objet / objet OLE
Au départ j'avais choisi l'option "créer à partir d'un fichier", mais autant choisir d'emblée l'option "créer un nouvel objet" / "classeur Libreoffice".
Le tableau apparaît à l'écran, et surprise, le menu "feuille" apparaît également dans la barre des menus. Je retourne donc dans "feuilles" / "lien vers des données externe" / parcourir
Je sélectionne mon fichier fortune2.html (voir script au dessus)
Je choisis l'importation automatique, je sélectionne la table "HTML_all" et enfin je coche la case "actualiser toutes les 10 secondes"
Cela fonctionne, les blagues défilent toutes les 10 secondes, il n'y a même pas besoin d'ajouter une deuxième diapositive.
Les blagues s'affichant par défaut en petits caractères, il suffit d'étendre la zone de sélection (rectangle bleu) pour augmenter la taille de ceux-ci.
Ce système de flux externes m'a immédiatement donné une autre idée, il va me permettre de rajouter une horloge quasi temps réel (rafraîchissement toutes les 10 secondes) en bas de chaque diapo. Ou soyons fou, en gros caractère sur une des diapos, comme dans une vraie borne d'affichage dynamique.
Chose basique que LibreOffice ne sait pas (plus?) faire ! (il affiche la date et l'heure d'ouverture du document, même avec l'option "variable")
Voici la commande ultime pour afficher la date en supprimant les secondes et le fuseau horaire inutiles, et en ajoutant la majuscule au premier caractère tant qu'à faire...
date | sed 's/^.\{0\}\(.*\).\{14\}$/\1/' | sed 's/\(.\)/\U\1/' >>/home/fred/date.html
Ainsi qu'une commande pour aller récupérer les titres d'un flux RSS !
wget -q -O - http://www.lefigaro.fr/rss/figaro_sciences.xml | sed -n 's#.*<title>\(.*\)</title>.*#\1#p' >>/home/fred/rss.html
#!/bin/bash
echo "<html><table><tr>" >/home/fred/ephemeride.html
wget -q -O - http://www.ephemeride-jour.fr/rss/rss_saints.php >/home/fred/ephemeride.xml
xml2 <ephemeride.xml >ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i.BAK '1d' ephemeride.txt
sed -i -e "s/rss//g" ephemeride.txt
sed -i -e "s/channel//g" ephemeride.txt
sed -i -e "s/description//g" ephemeride.txt
sed -i -e "s/item//g" ephemeride.txt
sed -i -e "s/\/\/\/\///g" ephemeride.txt
sed -i -e "s/= <b>//g" ephemeride.txt
sed -i -e "s/= <B>//g" ephemeride.txt
sed -i -e "s/title=//g" ephemeride.txt
sed -i -e "s/link=//g" ephemeride.txt
sed -i -e "s/pubDate=//g" ephemeride.txt
sed -i -e "s/<\/b>//g" ephemeride.txt
sed -i -e "s/<\/b>//g" ephemeride.txt
sed -i -e "s/<\/B>//g" ephemeride.txt
sed -i -e "s/= //g" ephemeride.txt
sed -i -e "s/=//g" ephemeride.txt
sed -i -e "s/http\:\/\/www\.ephemeride-jour\.fr\/ephemeride\/saints-jour\.php//g" ephemeride.txt
sed -i -e "s/ 00\:00\:00 GMT//g" ephemeride.txt
sed -i -e "s/\./\.<\/tr><tr>/g" ephemeride.txt
sed -i -e "s/<BR>/<\/tr><tr>/g" ephemeride.txt
sed -i.BAK ':z;N;s/\n/<\/tr><tr>/;bz' ephemeride.txt
iconv -f UTF-8 -t ISO-8859-15 /home/fred/ephemeride.txt >>/home/fred/ephemeride.html
echo "</tr></table></html>" >>/home/fred/ephemeride.html
#!/bin/bash
echo "<html><table><tr>" >/home/fred/news.html
wget --user-agent="Mozilla" -q -O - https://guyane.coconews.com/flux-agenda.rss >/home/fred/news.xml
xml2 <news.xml >news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i.BAK '1d' news.txt
sed -i -e "s/rss//g" news.txt
sed -i -e "s/channel//g" news.txt
sed -i -e "s/description//g" news.txt
sed -i -e "s/item//g" news.txt
sed -i -e "s/\/\/\/\///g" news.txt
sed -i -e "s/\/\/\///g" news.txt
sed -i -e "s/•//g" news.txt
sed -i -e "s/title=//g" news.txt
sed -i -e "s/link=//g" news.txt
sed -i -e "s/pubDate=//g" news.txt
sed -i -e "s/’/ '/g" news.txt
sed -i -e "s/€/euro/g" news.txt
sed -i -e "s/=//g" news.txt
sed -i -e "s/ 00\:00\:00//g" news.txt
sed -i -e "s/Lire la suite//g" news.txt
sed -i -e '/^category/d' news.txt
sed -i -e '/^Thu,/d' news.txt
sed -i -e '/^Fri,/d' news.txt
sed -i -e '/^https/d' news.txt
sed -i -e '/^jeudi/d' news.txt
sed -i -e '/^vendredi/d' news.txt
sed -i -e '/^Jeudi/d' news.txt
sed -i -e '/^Sat/d' news.txt
sed -i -e '/^infos\.\.\./d' news.txt
sed -i -e "s/<BR>/<\/tr><tr>/g" news.txt
sed -i.BAK ':z;N;s/\n/<\/tr><tr>/;bz' news.txt
iconv -f UTF-8 -t ISO-8859-15 /home/fred/news.txt >>/home/fred/news.html
#echo `</home/fred/news.txt` >>news.html
echo "</tr></table></html>" >>/home/fred/news.html
Ces "nouvelles" fonctionnalités feront je l'espère ressembler vos documents LibreOffice Impress davantage à une vraie borne d'affichage dynamique. Si ce tuto pourra servir ou donner des idées à certains d'entre vous, notamment au niveau des scripts, c'est encore mieux !