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.
<?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);
?>
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.
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 . '"');
sudo -u www-data php /chemin/script/RevueWeb.php
http://mon.serveur.web/RevueWeb.php
http://mon.serveur.web/20200127.md
Tous les jours à 20h00 par exemple :
00 20 * * * sudo -u www-data php /chemin/script/RevueWeb.php