A basic Discourse archival tool

Discourseフォーラムが数週間後にオフラインになるため、サイトをアーカイブすることにしました。多くの調査と試行錯誤を経て、HTTrackで簡単な解決策を見つけました。学んだことをすべて紹介します。

HTTrackでDiscourseサイトをアーカイブする
Windowsユーザーの場合、最善の解決策はHTTrackのようです。これはうまく機能し、サイトをHTMLファイルにアーカイブしました。すべてのカテゴリ、スレッド、投稿が、相対ナビゲーションリンクを持つすべてのページを含めてアーカイブされました。

HTTrackの基本的なチュートリアルはこちらにあります。設定はデフォルトのまま、以下のカスタム設定を使用しました。

  • Webアドレス:
    • https://forums.gearboxsoftware.com/c/homeworld/
    • https://forums.gearboxsoftware.com/c/homeworld-dok/
  • スキャンルール:
    • -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(別名User Agent):
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

注: CSSの問題によりカテゴリリンクが機能しませんが、これは以下に説明するように簡単に修正できます。

CSSの問題
Googlebotとしてカテゴリページを表示すると、スレッドリンクが機能しません。例はこちらです。

これにより、HTTrack、archive.org、およびGoogleキャッシュでのカテゴリページでのナビゲーションが不可能になります。これはDiscourseのCSSファイルの問題のようです。リンクを修正するには、次のCSSファイルをブロック/削除するだけです。

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

@codinghorror - 対応していただけますか?

課題
試行錯誤の末、以下の課題に直面し、最終的に克服しました。

  • DiscourseページはJavaScriptで動的に生成されます。これにより、ほとんどのアーカイブ/クローラーツールでの結果が悪くなります。
  • ほとんどのスレッドは最初の約20件の投稿しか読み込まれず、残りの投稿はスクロールダウンするまで表示されません。Ctrl+Pを押すと、すべての投稿が表示される/printページが読み込まれます。ユーザーは印刷モードで1時間に5ページしか印刷できませんが、この制限はDiscourseサイト管理者によって増加させることができます。
  • Adrelanosは、複数ページの投稿がHTTrackによって正しくアーカイブされていないと指摘しましたが、これは私の設定では問題なかったので、彼のHTTrack設定によるものだと推測します。
  • ページをPDFとして保存しても、折りたたまれた詳細セクションは含まれません。
  • URLの末尾に?_escaped_fragment_を追加することで、ページを基本的なHTMLで読み込むことができますが、このトリックはスレッドにのみ機能し、カテゴリには機能しません。

上記の課題は、すべてのDiscourseページ/コンテンツがクローラーに対してHTMLとして正しくレンダリングされることを知れば、問題ではなくなります。これを行うには、クローラー/ブラウザのユーザーエージェントをGooglebotに変更して、ページのHTMLバージョンを取得する必要があります。

Archive.org
web.archive.orgの「Save Page Now」機能を使用すると、DiscourseのJavaScriptバージョンがアーカイブされ、結果が悪くなります。Archive.orgは、アーカイブを要求しているユーザーのエージェントを使用します。そのため、ユーザーエージェントをGooglebotに変更する必要があります。Chrome拡張機能「User-Agent Switcher for Chrome」を入手できます。オプションで以下を追加します。

  • 名前: Googlebot
  • 文字列: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • グループ: Chrome
  • インジケータフラグ: 1

代替アーカイブツール
多くのツールがここにリストされています: Archive an old forum "in place" to start a new Discourse forum
Cyotek WebCopy、A1 Website Download、WAILなどのGUIツールも簡単にテストしました。
コマンドラインツールには、mcmcclurのツールやwgetが含まれます。wgetのチュートリアルはこちらにあります。
しかし、Windowsユーザーの場合、最善の解決策はHTTrackのようです。

注: 新規ユーザーのため、投稿できるリンクは2つに制限されています。そのため、一部のリンクをプリフォーマットテキストに変換しました。

「いいね!」 9

根本原因を特定しました。背景画像がリンクと競合していたようです!

このファイル内で:
stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css

このコード内で:

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

CSSの問題の修正
リンクを修正するために、背景画像を1層下に移動します。

  • stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.cssを開き、「z-index:-1;」をすべて3回「z-index:-2;」に置き換えます。次に、「z-index:0;」を「z-index:-1;」に置き換えます。
  • 次に、desktop_32713c1b6551369eb391868f3d4e3f2ac9c38cf1.cssを開き、すべての「z-index:-1;」を単純に3回「z-index:-2;」に置き換えます。これでリンクが機能するようになります。
「いいね!」 7

お知らせいただきありがとうございます。これはクローラー/アーカイブビューなので、これらの画像は表示されるべきではありません。そのため、画像を削除するプルリクエストを開きました。

「いいね!」 6

参考までに、APIを使用して投稿コンテンツの簡単なバックアップを実行する最小限のPythonスクリプトを作成しました。GitHub - jamesob/discourse-archive: Provides a simple archive of Discourse content

かなり基本的なものですが、公開可能なアーカイブを生成する方法の概要を誰かに提供できるはずです。

「いいね!」 4

Discourseサイトのコンテンツをモジュール式(カテゴリ/トピック/制限を選択してスクレイピング)でスクレイピングする方法を思いつきました。ご覧ください。今のところ、サイトのローカル/静的バージョンを取得するためのツールにすぎません: GitHub - Diegorb1329/broad_listening_eth

「いいね!」 1