Gatsby 플러그인으로 Discourse를 헤드리스 CMS로 사용하기

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 버전 npm 다운로드

gatsby-source-discourse-topic-list는 Discourse 토론 포럼 플랫폼에서 토픽 목록을 가져와 Gatsby 노드로 변환하는 데 도움을 줍니다.

Discourse API가 제공하는 토픽 목록 외에도, 이 플러그인은 각 토픽의 원본 텍스트(raw text)도 가져옵니다.

시작하기

  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를 사용하는 경우, production과 development 키를 가진 객체로 정의합니다.
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": "The full unprocessed topic text in markdown format", 
        ...
      }
    ]
  }
}

여러 소스? 여러 인스턴스!

프로젝트에서 여러 엔드포인트를 가져오려면 플러그인을 여러 번 인스턴스화하면 됩니다. 각 인스턴스에 대해 서로 다른 rootKey를 설정하는 것을 잊지 마세요.

크레딧

이 플러그인은 Andreas Faust님의 훌륭한 gatsby-source-custom-api를 기반으로 구축되었습니다. :folded_hands:

기여하기

모든 기여에 깊이 감사드립니다.
버그, 기능 요청, 풀 리퀘트를 자유롭게 제출해 주세요.

:heart: 이 플러그인이 도움이 되었다면 GitHub에서 별점을 남겨주세요.

이쁘네요. 비공개 카테고리의 주제에서도 작동하나요? 디스코스를 헤드리스 CMS로 사용하는 시나리오에 대해 말씀드리는 거예요.

현재는 그렇지 않지만, 좋은 아이디어입니다. 추가하는 것은 어렵지 않을 것입니다. 비공개 콘텐츠에 액세스하려면 인증이 필요합니다. Gatsby 설정에 사용자 이름과 API 키를 추가할 수 있습니다.