Uma ferramenta básica de arquivamento do Discourse

Um fórum Discourse que eu uso será desativado em algumas semanas, então decidi arquivar o site. Pesquisei muito, tentei e errei, e encontrei uma solução simples com o HTTrack. Aqui está tudo o que aprendi.

Arquive um site Discourse com HTTrack
Para usuários do Windows, a melhor solução parece ser o HTTrack. Isso funcionou muito bem e arquivou o site em arquivos HTML. Todas as categorias, tópicos e postagens foram arquivados, incluindo todas as páginas com links de navegação relativos.

Um tutorial básico sobre o HTTrack está aqui. Deixei as configurações no padrão com as seguintes configurações personalizadas.

  • Endereços Web:
    • https://forums.gearboxsoftware.com/c/homeworld/
    • https://forums.gearboxsoftware.com/c/homeworld-dok/
  • Regras de Análise:
    • -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 do Navegador (também conhecido como User Agent):
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Observação: Há um problema de CSS impedindo que os links de categoria funcionem, mas isso pode ser facilmente corrigido conforme descrito abaixo.

Problema de CSS
Ao visualizar páginas de Categoria como googlebot, os links de tópico não funcionam. Um exemplo é aqui.

Isso torna a navegação impossível nas páginas de categoria no HTTrack, no archive.org e no cache do Google. Parece ser um problema do Discourse em um arquivo CSS. Para corrigir os links, basta bloquear/excluir o seguinte arquivo CSS:

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

@codinghorror - Vocês podem resolver isso?

Desafios
Encontrei os seguintes desafios e eventualmente os superei após muita tentativa e erro.

  • As páginas do Discourse são geradas dinamicamente com JavaScript. Isso resulta em maus resultados com a maioria das ferramentas de arquivamento/rastreamento.
  • A maioria dos tópicos carrega apenas com as primeiras ~20? postagens, o restante das postagens não aparece até que você role para baixo. Pressionar Ctrl+P carrega uma página /print com todas as postagens visíveis. Os usuários são limitados a imprimir 5 páginas por hora no modo de impressão, mas esse limite pode ser aumentado por um administrador do site Discourse.
  • Adrelanos observou que tópicos de várias páginas não estavam sendo arquivados corretamente pelo HTTrack, no entanto, suspeito que esse problema se deva às configurações do HTTrack dele, pois eu não tive esse problema.
  • Salvar uma página em PDF não incluirá nenhuma seção de detalhes recolhida.
  • As páginas podem ser carregadas em HTML básico adicionando ?_escaped_fragment_ ao final de um URL, mas esse truque só funciona para tópicos, não para categorias.

Os desafios acima não são uma preocupação quando você descobre que todas as páginas/conteúdo do Discourse podem ser renderizados corretamente como HTML para rastreadores. Para fazer isso, você deve alterar o user agent do seu rastreador/navegador para googlebot para obter a versão HTML das páginas.

Archive.org
Se você usar o recurso “Salvar Página Agora” em web.archive.org, ele arquivará a versão JavaScript do Discourse com resultados ruins. O Archive.org usa o user agent da pessoa que solicita o arquivo. Portanto, você deve alterar seu user agent para googlebot. Você pode obter uma extensão do Chrome chamada “User-Agent Switcher for Chrome”. Nas opções, adicione:

  • Nome: Googlebot
  • String: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Grupo: Chrome
  • Indicador: 1

Ferramentas de Arquivamento Alternativas
Muitas ferramentas estão listadas aqui: Archive an old forum "in place" to start a new Discourse forum
Também testei brevemente ferramentas GUI como Cyotek WebCopy, A1 Website Download e WAIL.
Ferramentas de linha de comando incluem a ferramenta de mcmcclur e o wget. Um tutorial sobre wget está aqui.
No entanto, para usuários do Windows, a melhor solução parece ser o HTTrack.

Observação: Como sou um novo usuário, estou limitado a dois links em uma postagem. Por isso, transformei alguns links em texto pré-formatado.

9 curtidas

Agora identifiquei a causa raiz. Descobri que a imagem de fundo está conflitando com os links!

Neste arquivo:
stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css

Neste código:

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

Correção do Problema de CSS
Mova a imagem de fundo para uma camada inferior para corrigir os links.

  • Abra stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css e substitua todos os três “z-index:-1;” por “z-index:-2;”. Em seguida, substitua “z-index:0;” por “z-index:-1;”.
  • Em seguida, abra desktop_32713c1b6551369eb391868f3d4e3f2ac9c38cf1.css e simplesmente substitua todos os três “z-index:-1;” por “z-index:-2;”. Os links agora funcionarão.
7 curtidas

Obrigado por nos informar, na verdade, como esta é uma visualização de rastreador/arquivo, essas imagens não deveriam ser exibidas de qualquer maneira… então abri um PR para removê-las

6 curtidas

Para que valha a pena, escrevi um script Python mínimo viável que realiza backup simples do conteúdo de posts usando a API: GitHub - jamesob/discourse-archive: Provides a simple archive of Discourse content

É bem básico, mas deve dar a alguém uma ideia geral de como gerar um arquivo adequado para o público.

4 curtidas

Acabei de criar uma maneira de raspar todo o conteúdo de um site discourse de forma modular (escolha quais categorias/tópicos/limites raspar). Dê uma olhada. Até agora, é apenas uma ferramenta para obter uma versão local/estática de um site: GitHub - Diegorb1329/broad_listening_eth

1 curtida