anciennement SPACE OASIS

Revue de web automatisée sous Linux avec Semantic Scuttle, PHP, CutyCapt, GraphicsMagick ...

Les prérequis techniques

Pour ma part j'utilise de longue date Semantic Scuttle, qui me facilite grandement l'enregistrement des URL, notamment grâce à une extension pour Firefox ou le bookmarklet dédié. À défaut vous pourrez facilement adapter ce code avec une source de données en markdown... ou autre.

Certes, cela représente beaucoup de dépendances, mais on les trouve facilement sous GNU/Linux et ces composants restent gratuits.

Le script PHP


<?php // /chemin/script/RevueWeb.php $uneDate = date('Y-m-d'); $maDate = new DateTime($uneDate); $dateFormatee = date_format($maDate, 'Ymd'); $dateLisible = date_format($maDate, 'd/m/Y'); $imgDir = "/chemin/script/"; require_once 'src/Feed.php'; // (RSS to PHP) // Flux RSS des pages enregistrées dans Scuttle dédiés à votre revue de web : $rss = Feed::loadRss('https://instance.semantic.scuttle/rss.php/frenchhope/tag_de_la_revue_de_web?sort=date_desc&count=2048&privateKey=ma.cle.privee'); $versionMarkdown = "## Revue de web du $dateLisible" . PHP_EOL . PHP_EOL; // Titre // contenu foreach ($rss->item as $item) { $versionMarkdown .= "[" . $item->title . "](" . $item->link . ")" . PHP_EOL . PHP_EOL; // on formate le titre et les hyperliens // on réalise des captures d'écran au format JPEG, c'est plus joli et ça ne tiens pas trop de place. // pour cela on crée un serveur d'affichage virtuel (serveur X) avec xvfb-run parce qu'en ligne de commande sur un serveur il n'y en a pas ! // Voir la documentation de CutyCapt pour les options. $hash = hash('sha256',$item->link); $imgFile = $imgDir . "webScreenShot_" . $hash . ".jpg"; exec('xvfb-run --server-args="-screen 0, 1900x1080x24" cutycapt --min-width=1900 --min-height=1080 --smooth --url="' . $item->link . '" --out="' . $imgFile . '"'); // Recadrage avec GraphicsMagick exec('gm convert ' . $imgFile . ' -crop 1900x1080+0+0 ' . $imgFile); // Redimentionnement avec GraphicsMagick exec('gm mogrify -resize 950x540 -quality 65 ' . $imgFile); $versionMarkdown .= "![]($imgFile)" . PHP_EOL . PHP_EOL; $versionMarkdown .= "---" . PHP_EOL . PHP_EOL; } // Tout dans un fichier avec la date du jour file_put_contents("$dateFormatee.md", $versionMarkdown, FILE_APPEND | LOCK_EX); ?>

Affichage de la revue dans une page web

Pour ma part je copie ce fichier Markdown dans mon dossier de données Nextcloud car avec l'application Pico CMS je peux l'afficher directement. Dans ce cas il faut mettre à jour la base Nextcloud :

sudo -u www-data php /var/www/nextcloud/occ files:scan [nom d'utilisateur]"

Mais vous pourriez tout aussi bien créer un script en PHP pour afficher le Markdown dans une page web avec parsedown par exemple.

L'alternative à base de source de fichier Markdown plutôt que Semantic Scuttle et RSS

remplacer :

$rss = Feed::loadRss('https://instance.semantic.scuttle/rss.php/frenchhope/tag_de_la_revue_de_web?sort=date_desc&count=2048&privateKey=ma.cle.privee');

par :

$contenu = file_get_contents('/chemin/du/fichier.md');
$regex = "/\[([^\[\]]*)\](.*)/";
preg_match_all("`$regex`", $contenu, $matches);  

et :

foreach ($rss->item as $item) {
$versionMarkdown .= "[" . $item->title . "](" . $item->link . ")" . PHP_EOL . PHP_EOL; 
$hash = hash('sha256',$item->link);
$imgFile = $imgDir . "webScreenShot_" . $hash . ".jpg";
exec('xvfb-run --server-args="-screen 0, 1900x1080x24" cutycapt --min-width=1900 --min-height=1080 --smooth --url="' . $item->link . '" --out="' . $imgFile . '"');

par :

foreach ($matches as $item) {
$versionMarkdown .= "[" . $item[0] . "](" . $item[1] . ")" . PHP_EOL . PHP_EOL; 
$hash = hash('sha256',$item[1]);
$imgFile = $imgDir . "webScreenShot_" . $hash . ".jpg";
exec('xvfb-run --server-args="-screen 0, 1900x1080x24" cutycapt --min-width=1900 --min-height=1080 --smooth --url="' . $item[1] . '" --out="' . $imgFile . '"');

Utilisation

  • En ligne de commande
sudo -u www-data php /chemin/script/RevueWeb.php
  • Ou depuis l'URL de la page "RevueWeb.php" si vous la publiez avec un serveur web

http://mon.serveur.web/RevueWeb.php

  • Puis téléchargement d'une revue :

http://mon.serveur.web/20200127.md

Automatisation avec cron

Tous les jours à 20h00 par exemple :

00 20 * * *    sudo -u www-data php /chemin/script/RevueWeb.php

Dons & participations financières en 2019

Comme chaque année, depuis des années, 2019 fut une année de choix... Voici donc mes dons cette année :

  • Livre “Inégalités en France 2019”
  • GMIC
  • Fedilab / Mastalab
  • APRIL
  • digiKam
  • Framasoft
  • Wikidébats
  • Pompiers
  • Internet Archive (archive.org)
  • Médecins sans frontières
  • Greenpeace
  • Handicap International
  • Unicef
  • WWF
  • Croix Rouge Française

Convertir une page de dokuwiki en markdown

Fichier attachéTaille
Image icon 1280px-Markdown-mark.svg_.png9.37 Ko

Voilà quelques temps déjà je me suis décidé à maximiser progressivement mon utilisation de la syntaxe Markdown, c'est pourquoi j'ai installé il y a quelques mois le filtre adapté pour Drupal (pour rappel le CMS utilisé pour réaliser ce blog). Après m'être aussi familiarisé avec lui sur le réseau social diaspora* et la rédaction de documentations professionnelles je poursuis cet effort en prévoyant de migrer progressivement de DokuWiki vers Wiki.js (qui permet de rédiger directement des pages de wiki en markdown), à cet effet je me suis posé la question de savoir s'il était possible à minima de récupérer certains articles sans avoir à les réécrire. Et c'est effectivement le cas. Je vous expose donc une méthode manuelle reposant sur l'utilitaire de conversion en ligne de commande Pandoc.

Il m'aurait été possible de décrire comment convertir tout le wiki puisque dokuwiki stocke les pages sous forme de fichiers, mais ce n'est pas l'objet de ce tutoriel qui se veut plus simple à comprendre et généralisable à d'autres systèmes de wiki sans avoir nécessairement accès au Back office du serveur.

Prérequis

  • Une instance de dokuwiki (forcément)
  • Pandoc 2.6 minimum

Installation de Pandoc sous Linux

Fedora / Redhat / Centos, etc.

sudo dnf update
sudo dnf install pandoc

Debian, Ubuntu, Raspbian, Mint, etc.

sudo apt update ; sudo apt upgrade
sudo apt install pandoc

Installation manuelle de la version la plus récente de Pandoc

Pour connaître le lien de téléchargement de la dernière version (actuellement 2.7.3) : c'est par ici

VERSION=2.7.3
TGZ=https://github.com/jgm/pandoc/releases/download/$VERSION/pandoc-$VERSION-linux.tar.gz
DEST=$HOME/.local
wget -O pandoc.tar.gz $TGZ
tar xvzf pandoc.tar.gz --strip-components 1 -C $DEST
cd $DEST/bin

Conversion de page dokuwiki en markdown

wget -O fichier.dokuwiki "http://mon.instance.dokuwiki/mapage?do=export_raw"
# ou wget -O fichier.dokuwiki "http://mon.insance.dokuwiki/?id=mapage&do=export_raw"
pandoc -f dokuwiki -t markdown fichier.dokuwiki -o fichier.md
# préférable dans le cas ou vous avez suivi l'étape d'installation manuelle :
# ./pandoc -f dokuwiki -t markdown fichier.dokuwiki -o fichier.md

Pages

Subscribe to ESPITALLIER.NET RSS