Discourse をヘッドレス CMS として使用する Gatsby プラグイン

Discourse 用ではなく、Gatsby 用のプラグインを作成しました。このプラグインは、Discourse インストールからトピックリストを取得し、Gatsby ノードに変換します。これにより、Discourse をヘッドレス CMS として使用するプロセスが簡素化されます。

私たちはこのプラグインを、フォーラムに新しいコンテンツが追加されると自動的に更新されるマイクロブログとカレンダーを構築するプロジェクトで使用しています。

以下がマイクロブログの例です:

ソース: https://foodshift.se/t/forenade-inkop-nyheter-blogg/290/9
結果: https://forenadeinkop.se/blogg

そして、カレンダーの例です:

ソース: https://foodshift.se/tags/c/events/13/forenade-inkop/l/agenda
結果: https://forenadeinkop.se(ページ下部)

他にも役立つ方がいれば幸いです!


npm version npm downloads

gatsby-source-discourse-topic-list は、Discourse のディスカッションプラットフォームからトピックリストを取得し、Gatsby ノードに変換するのを支援します。

Discourse API が提供するトピックリストに加えて、このプラグインは各トピックの生のテキストも取得します。

始め方

  1. yarn または npm でパッケージをインストールします

yarn add gatsby-source-discourse-topic-list

  1. gatsby-config.js の plugins に追加します
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://my-discourse-server.com"
                endPoint: 'top.json',
            }
        }
    ]
};

オプション

名前 タイプ 説明
url object または string 必須. Discourse インストールの URL を文字列で指定します。開発用と本番用で異なる API を持っている場合は、productiondevelopment をキーとするオブジェクトを定義してください。
endPoint string 必須. topic_list を返す任意の Discourse API エンドポイント。
rootKey string オプション. API に名前を付けます。

Discourse API エンドポイントの例

カテゴリ内の最新トピック:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/1.json',
}

タグでフィルタリングされたカテゴリ内の最新トピック:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'tags/c/bug/1/pr-welcome.json',
}

カテゴリ内のトップトピック:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/support/6/l/top.json',
}

エンドポイントの完全なリストについては、Discourse API ドキュメント を参照してください。

結果の例

未加工のトピックテキスト全体を含む raw フィールドが追加されていることに注意してください。

{
  "users": [
    {
      "id": 0,
      "username": "string",
      "avatar_template": "string"
    }
  ],
  "topic_list": {
    "can_create_topic": true,
    "draft": {},
    "draft_key": "string",
    "draft_sequence": 0,
    "for_period": "string",
    "per_page": 0,
    "topics": [
      {
        "id": 0,
        "title": "string",
        "fancy_title": "string",
        "slug": "string",
        "raw": "Markdown 形式の未加工のトピックテキスト全体", 
        ...
      }
    ]
  }
}

複数のソース?複数のインスタンス!

プロジェクトで複数のエンドポイントを取得したい場合は、プラグインを複数回インスタンス化するだけです。ただし、各インスタンスで異なる rootKey を設定してください。

クレジット

このプラグインは、Andreas Faust による優れた gatsby-source-custom-api に基づいています。:folded_hands:

貢献

あらゆる貢献を大歓迎します。
バグ報告、機能リクエスト、プルリクエストを自由に提出してください。

:heart: このプラグインが役に立つ場合は、GitHub でスターをつけてください。

「いいね!」 11

見た目が素敵ですね。プライベートカテゴリのトピックでも機能しますか?DiscourseをヘッドレスCMSとして使用するシナリオについてお聞きしています。

「いいね!」 2

現在はそうではありませんが、良いアイデアですね。追加は難しくありません。プライベートコンテンツへのアクセスには認証が必要です。Gatsby の設定にユーザー名と API キーを追加できます。

「いいね!」 2