Un semplice strumento di archiviazione per Discourse

Un forum di Discourse che uso verrà messo offline tra un paio di settimane, quindi ho deciso di archiviare il sito. Ho fatto molte ricerche, tentativi ed errori e ho trovato una soluzione semplice con HTTrack. Ecco tutto quello che ho imparato.

Archivia un sito Discourse con HTTrack
Per gli utenti Windows, la soluzione migliore sembra essere HTTrack. Ha funzionato benissimo e ha archiviato il sito in file HTML. Tutte le categorie, le discussioni e i post sono stati archiviati, comprese tutte le pagine con collegamenti di navigazione relativi.

Un tutorial di base su HTTrack è qui. Ho lasciato le impostazioni predefinite con le seguenti impostazioni personalizzate.

  • Indirizzi Web:
    • https://forums.gearboxsoftware.com/c/homeworld/
    • https://forums.gearboxsoftware.com/c/homeworld-dok/
  • Regole di scansione:
    • -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/*
  • ID Browser (alias User Agent):
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Nota: c’è un problema CSS che impedisce il funzionamento dei collegamenti delle categorie, tuttavia questo può essere facilmente risolto come descritto di seguito.

Problema CSS
Quando si visualizzano le pagine delle categorie come googlebot, i collegamenti delle discussioni non funzionano. Un esempio è [qui](https://web.archive.org/web/20220731051419/https://forums.gearboxsoftware.com/c/homeworld/57).

Questo rende impossibile la navigazione nelle pagine delle categorie in HTTrack, archive.org e nella cache di Google. Sembra essere un problema di Discourse in un file CSS. Per correggere i collegamenti, blocca/elimina semplicemente il seguente file CSS:

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

@codinghorror - Potete affrontare questo problema?

Sfide
Ho incontrato le seguenti sfide e alla fine le ho superate dopo molti tentativi ed errori.

  • Le pagine di Discourse sono generate dinamicamente con JavaScript. Questo porta a scarsi risultati con la maggior parte degli strumenti di archiviazione/crawler.
  • La maggior parte delle discussioni carica solo con i primi ~20? post, il resto dei post non appare finché non si scorre verso il basso. Premendo Ctrl+P si carica una pagina /print con tutti i post visibili. Gli utenti sono limitati alla stampa di 5 pagine all’ora in modalità stampa, ma questo limite può essere aumentato da un amministratore del sito Discourse.
  • Adrelanos ha notato che le discussioni multipagina non venivano archiviate correttamente da HTTrack, tuttavia sospetto che questo problema fosse dovuto alle sue impostazioni di HTTrack, poiché io non ho avuto questo problema.
  • Il salvataggio di una pagina in PDF non includerà alcuna sezione di dettagli collassata.
  • Le pagine possono essere caricate in HTML di base aggiungendo ?_escaped_fragment_ alla fine di un URL, ma questo trucco funziona solo per le discussioni, non per le categorie.

Le sfide di cui sopra non sono un problema una volta che si impara che tutte le pagine/contenuti di Discourse possono essere renderizzati correttamente come HTML per i crawler. Per farlo, devi cambiare il tuo crawler / user agent del browser in googlebot per ottenere la versione HTML delle pagine.

Archive.org
Se utilizzi la funzione “Salva pagina ora” su web.archive.org, archivierà la versione JavaScript di Discourse con scarsi risultati. Archive.org utilizza lo user agent della persona che richiede l’archivio. Quindi devi cambiare il tuo user agent in googlebot. Puoi ottenere un’estensione di Chrome chiamata “User-Agent Switcher for Chrome”. Nelle opzioni aggiungi:

  • Nome: Googlebot
  • Stringa: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Gruppo: Chrome
  • Indicatore: 1

Strumenti di archiviazione alternativi
Molti strumenti sono elencati qui: Archive an old forum "in place" to start a new Discourse forum
Ho anche testato brevemente strumenti GUI come Cyotek WebCopy, A1 Website Download e WAIL.
Gli strumenti da riga di comando includono lo strumento di mcmcclur e wget. Un tutorial su wget è [qui](https://letswp.justifiedgrid.com/download-discourse-forum-wget/).
Tuttavia, per gli utenti Windows, la soluzione migliore sembra essere HTTrack.

Nota: Dato che sono un nuovo utente, sono limitato a due collegamenti in un post. Pertanto, ho trasformato alcuni collegamenti in testo preformattato.

9 Mi Piace

Ho identificato la causa principale. Si è scoperto che l’immagine di sfondo è in conflitto con i collegamenti!

All’interno di questo file:
stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css

All’interno di questo codice:

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%;
}

Correzione problema CSS
Sposta l’immagine di sfondo in un livello inferiore per correggere i collegamenti.

  • Apri stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css e sostituisci tutti e tre gli "z-index:-1;" con "z-index:-2;". Quindi sostituisci "z-index:0;" con "z-index:-1;".
  • Quindi apri desktop_32713c1b6551369eb391868f3d4e3f2ac9c38cf1.css e semplicemente sostituisci tutti e tre gli "z-index:-1;" con "z-index:-2;". I collegamenti funzioneranno ora.
7 Mi Piace

Grazie per avercelo comunicato, dato che questa è una vista crawler/archivio, queste immagini non dovrebbero essere visualizzate comunque… quindi ho aperto una PR per rimuoverle

6 Mi Piace

Per quello che vale, ho scritto uno script Python minimo funzionante che esegue un semplice backup del contenuto dei post utilizzando l’API: GitHub - jamesob/discourse-archive: Provides a simple archive of Discourse content

È piuttosto basilare, ma dovrebbe dare a qualcuno un’idea approssimativa di come generare un archivio adatto al pubblico.

4 Mi Piace

Ho appena trovato un modo per scaricare tutto il contenuto di un sito discourse in modo modulare (scegli quali categorie/argomenti/limiti scaricare). Dai un’occhiata. Finora è solo uno strumento per ottenere una versione locale/statica di un sito: GitHub - Diegorb1329/broad_listening_eth

1 Mi Piace