Un outil simple d'archivage pour Discourse

Un forum Discourse que j’utilise sera mis hors ligne dans quelques semaines, j’ai donc décidé d’archiver le site. J’ai fait beaucoup de recherches, d’essais et d’erreurs, et j’ai trouvé une solution simple avec HTTrack. Voici tout ce que j’ai appris.

Archiver un site Discourse avec HTTrack
Pour les utilisateurs de Windows, la meilleure solution semble être HTTrack. Cela a très bien fonctionné et a archivé le site en fichiers HTML. Toutes les catégories, discussions et publications ont été archivées, y compris toutes les pages avec des liens de navigation relatifs.

Un tutoriel de base sur HTTrack est ici. J’ai laissé les paramètres par défaut avec les paramètres personnalisés suivants.

  • Adresses Web :
    • https://forums.gearboxsoftware.com/c/homeworld/
    • https://forums.gearboxsoftware.com/c/homeworld-dok/
  • Règles d’analyse :
    • -gearboxsoftware.com/* -forums.gearboxsoftware.com/* +forums.gearboxsoftware.com/c/homeworld/* +forums.gearboxsoftware.com/c/homeworld-dok/* +forums.gearboxsoftware.com/t/* +forums.gearboxsoftware.com/user_avatar/* +sea2.discourse-cdn.com/*
  • Identifiant du navigateur (alias User Agent) :
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Remarque : Il y a un problème CSS qui empêche les liens de catégorie de fonctionner, mais cela peut être facilement corrigé comme décrit ci-dessous.

Problème CSS
Lors de la visualisation des pages de catégorie en tant que googlebot, les liens des discussions ne fonctionnent pas. Un exemple est [ici](https://web.archive.org/web/20220731051419/https://forums.gearboxsoftware.com/c/homeworld/57).

Cela rend la navigation impossible sur les pages de catégorie dans HTTrack, archive.org et le cache Google. Il semble s’agir d’un problème Discourse dans un fichier CSS. Pour corriger les liens, bloquez/supprimez simplement le fichier CSS suivant :

  • stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css?__ws=forums.gearboxsoftware.com

@codinghorror - Pouvez-vous régler cela ?

Défis
J’ai rencontré les défis suivants et je les ai finalement surmontés après de nombreux essais et erreurs.

  • Les pages Discourse sont générées dynamiquement avec JavaScript. Cela donne de mauvais résultats avec la plupart des outils d’archivage/robots d’exploration.
  • La plupart des discussions ne se chargent qu’avec les ~20 premiers ? messages, le reste des messages n’apparaît qu’en faisant défiler vers le bas. Appuyer sur Ctrl+P charge une page /print avec tous les messages visibles. Les utilisateurs sont limités à l’impression de 5 pages par heure en mode impression, mais cette limite peut être augmentée par un administrateur du site Discourse.
  • Adrelanos a noté que les discussions multi-pages n’étaient pas correctement archivées par HTTrack, cependant je soupçonne que ce problème était dû à ses paramètres HTTrack, car je n’ai pas eu ce problème.
  • L’enregistrement d’une page au format PDF n’inclura aucune section de détails réduite.
  • Les pages peuvent être chargées en HTML de base en ajoutant ?_escaped_fragment_ à la fin d’une URL, mais cette astuce ne fonctionne que pour les discussions, pas pour les catégories.

Les défis ci-dessus ne sont pas une préoccupation une fois que vous apprenez que toutes les pages/contenus Discourse peuvent être correctement rendus en HTML pour les robots d’exploration. Pour ce faire, vous devez changer l’agent utilisateur de votre robot d’exploration / navigateur en googlebot pour obtenir la version HTML des pages.

Archive.org
Si vous utilisez la fonction « Enregistrer la page maintenant » sur web.archive.org, elle archivera la version JavaScript de Discourse avec de mauvais résultats. Archive.org utilise l’agent utilisateur de la personne qui demande l’archive. Vous devez donc changer votre agent utilisateur en googlebot. Vous pouvez obtenir une extension Chrome appelée « User-Agent Switcher for Chrome ». Dans les options, ajoutez :

  • Nom : Googlebot
  • Chaîne : Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Groupe : Chrome
  • Indicateur : 1

Outils d’archivage alternatifs
De nombreux outils sont listés ici : Archive an old forum "in place" to start a new Discourse forum
J’ai également brièvement testé des outils GUI comme Cyotek WebCopy, A1 Website Download et WAIL.
Les outils en ligne de commande incluent l’outil de mcmcclur et wget. Un tutoriel sur wget est [ici](https://letswp.justifiedgrid.com/download-discourse-forum-wget/).
Cependant, pour les utilisateurs de Windows, la meilleure solution semble être HTTrack.

Remarque : Comme je suis un nouvel utilisateur, je suis limité à deux liens dans un message. J’ai donc transformé certains liens en texte préformaté.

9 « J'aime »

J’ai maintenant identifié la cause première. Il s’est avéré que l’image d’arrière-plan entrait en conflit avec les liens !

Dans ce fichier :
stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css

Dans ce code :

body:before {
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    content: "";
    display: block;
    background-color: #000000;
    background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23adadad' fill-opacity='0.4' fill-rule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E");
    position: fixed;
    height: 100vh;
    width: 100vw;
    top: 0;
    left: 0;
    z-index: 0;
    opacity: 0.03;
    background-size: 70%;
}

Correction du problème CSS
Déplacez l’image d’arrière-plan d’une couche vers le bas pour corriger les liens.

  • Ouvrez stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css et remplacez tous les trois « z-index:-1; » par « z-index:-2; ». Ensuite, remplacez « z-index:0; » par « z-index:-1; ».
  • Ensuite, ouvrez desktop_32713c1b6551369eb391868f3d4e3f2ac9c38cf1.css et remplacez simplement tous les trois « z-index:-1; » par « z-index:-2; ». Les liens fonctionneront alors.
7 « J'aime »

Merci de nous avoir informés, car il s’agit d’une vue de crawler/archive, ces images ne devraient pas être affichées de toute façon… j’ai donc ouvert une PR pour les supprimer

6 « J'aime »

Pour ce que ça vaut, j’ai écrit un script Python minimum viable qui effectue une sauvegarde simple du contenu des publications à l’aide de l’API : GitHub - jamesob/discourse-archive: Provides a simple archive of Discourse content

Il est assez rudimentaire, mais devrait donner à quelqu’un une idée approximative de la façon de générer une archive appropriée pour le public.

4 « J'aime »

Je viens de trouver un moyen de récupérer tout le contenu d’un site discourse de manière modulaire (choisir quelles catégories/sujets/limites extraire). Jetez un coup d’œil. Jusqu’à présent, il s’agit juste d’un outil pour obtenir une version locale/statique d’un site : GitHub - Diegorb1329/broad_listening_eth

1 « J'aime »