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
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