본문 바로가기
프로그램 (PHP,Python)

Confluence Wiki 페이지와 하위 페이지 PDF 변환 및 저장 자동화

by 날으는물고기 2025. 1. 1.

Confluence Wiki 페이지와 하위 페이지 PDF 변환 및 저장 자동화

Confluence Wiki 페이지와 하위 페이지를 PDF로 저장하는 n8n 워크플로를 구성하려면 다음 단계를 따르면 됩니다. 이 과정은 Confluence API와 n8n의 HTTP Request 및 기타 노드를 사용합니다.


사전 준비

  1. Confluence API 활성화: Confluence Cloud 또는 Server에서 API 호출을 허용해야 합니다.
  2. API Token 생성: Confluence Cloud의 경우, Atlassian 계정에서 API Token을 생성하세요.
  3. n8n 설정: Confluence에 접근할 수 있는 HTTP Request 노드와 파일 저장용 기능을 사용할 수 있도록 설정하세요.

워크플로 구성 단계

1. HTTP Request 노드: 루트 페이지 ID 가져오기

  • 목적: 지정한 Wiki 페이지의 ID를 가져옵니다.
  • 설정
    • Method: GET
    • URL: https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content?title=<PAGE_TITLE>
    • Headers:
      • Authorization: Basic <base64_encoded_email:api_token>
    • Query Parameters:
      • expand: body.export_view

2. HTTP Request 노드: 하위 페이지 가져오기

  • 목적: 루트 페이지의 하위 페이지 목록을 가져옵니다.
  • 설정
    • Method: GET
    • URL: https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content/<PAGE_ID>/child/page
    • Headers:
      • Authorization: Basic <base64_encoded_email:api_token>
    • Query Parameters:
      • expand: body.export_view

3. Set 노드: PDF 변환 요청 준비

  • 목적: PDF로 변환할 페이지의 내용을 정리합니다.
  • 설정
    • Key/Value: 페이지 제목, HTML 콘텐츠, 페이지 ID

4. HTML to PDF 노드

  • 목적: HTML 콘텐츠를 PDF로 변환합니다.
  • 설정
    • HTML 입력: 이전 HTTP Request 노드에서 가져온 HTML 콘텐츠
    • PDF 옵션: 필요에 따라 페이지 크기, 여백 등 설정

5. Write Binary File 노드

  • 목적: PDF 파일을 지정된 위치에 저장합니다.
  • 설정
    • File Name: {{$json["title"]}}.pdf
    • File Path: 지정된 디렉토리 경로

6. Loop 노드: 하위 페이지 처리

  • 목적: 모든 하위 페이지에 대해 동일한 프로세스를 반복합니다.
  • 구성
    • 이전 단계에서 가져온 하위 페이지 데이터를 배열로 받아 반복 처리

워크플로 구성 요약

  1. HTTP Request 노드로 지정된 페이지의 ID를 가져옵니다.
  2. 해당 페이지의 하위 페이지 목록을 API로 호출하여 가져옵니다.
  3. 각 페이지의 내용을 HTML로 추출하여 PDF로 변환합니다.
  4. 변환된 PDF를 파일로 저장합니다.
  5. 모든 페이지 및 하위 페이지에 대해 반복합니다.

Confluence API 예시

페이지 ID 가져오기

curl -X GET \
  "https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content?title=<PAGE_TITLE>" \
  -H "Authorization: Basic <base64_encoded_email:api_token>"

하위 페이지 목록 가져오기

curl -X GET \
  "https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content/<PAGE_ID>/child/page" \
  -H "Authorization: Basic <base64_encoded_email:api_token>"

워크플로가 실행되면 지정한 Wiki 페이지 및 모든 하위 페이지가 각각 PDF로 변환되어 저장됩니다. 추가적인 기능(예: 파일 압축, 이메일 전송 등)을 원하면 n8n의 다른 노드를 추가해 확장할 수 있습니다. 어제 변경된 페이지만 PDF로 저장하려면 Confluence API의 history 데이터를 활용하여 변경된 날짜를 확인한 뒤 PDF로 저장하는 작업을 진행해야 합니다. 다음은 n8n에서 이를 구현하기 위한 방법입니다.


워크플로 구성 단계 (어제 변경된 페이지만 PDF로 저장)

1. HTTP Request 노드: 페이지 및 하위 페이지 ID 가져오기

  • 목적: 루트 페이지의 ID와 하위 페이지 목록을 가져옵니다.
  • 설정
    • Method: GET
    • URL
      https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content/<PAGE_ID>/child/page
    • Headers
      • Authorization: Basic <base64_encoded_email:api_token>
    • Query Parameters
      • expand: version,history.lastUpdated

2. Function 노드: 어제 변경된 페이지 필터링

  • 목적: history.lastUpdated 데이터를 기준으로 어제 변경된 페이지만 필터링합니다.
  • 설정
    • 스크립트
      const yesterday = new Date();
      yesterday.setDate(yesterday.getDate() - 1);
      yesterday.setHours(0, 0, 0, 0); // 어제의 00:00:00
      
      const today = new Date();
      today.setHours(0, 0, 0, 0); // 오늘의 00:00:00
      
      return items.filter(item => {
        const lastUpdated = new Date(item.json.history.lastUpdated.when);
        return lastUpdated >= yesterday && lastUpdated < today;
      });

3. HTTP Request 노드: 페이지 내용 가져오기

  • 목적: 변경된 페이지의 HTML 내용을 가져옵니다.
  • 설정
    • Method: GET
    • URL
      https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content/<PAGE_ID>?expand=body.export_view
    • Headers
      • Authorization: Basic <base64_encoded_email:api_token>

4. HTML to PDF 노드

  • 목적: 변경된 페이지의 HTML 콘텐츠를 PDF로 변환합니다.
  • 설정
    • HTML 입력: 이전 단계에서 가져온 HTML 콘텐츠
    • PDF 옵션: 필요에 따라 페이지 크기, 여백 등 설정

5. Write Binary File 노드

  • 목적: PDF 파일을 지정된 위치에 저장합니다.
  • 설정
    • File Name: {{$json["title"]}}_{{new Date().toISOString()}}.pdf
    • File Path: 지정된 디렉토리 경로

6. Loop 노드: 변경된 페이지 반복 처리

  • 목적: 어제 변경된 모든 페이지를 PDF로 저장합니다.
  • 구성
    • 필터링된 페이지 데이터를 반복 처리

변경된 페이지 필터링을 위한 Confluence API 호출 예시

curl -X GET \
  "https://<YOUR_CONFLUENCE_DOMAIN>.atlassian.net/wiki/rest/api/content/<PAGE_ID>/child/page?expand=history.lastUpdated" \
  -H "Authorization: Basic <base64_encoded_email:api_token>"

history.lastUpdated 데이터 예시

{
  "id": "123456",
  "title": "Example Page",
  "history": {
    "lastUpdated": {
      "when": "2024-12-02T12:34:56.789Z"
    }
  }
}

결과

  • 어제(history.lastUpdated) 변경된 페이지만 필터링하여 PDF로 저장됩니다.
  • 모든 변경된 페이지는 각각 PDF 파일로 지정된 디렉토리에 저장됩니다.

확장 가능성

  • Custom GPTs에 학습 데이터를 추가
  • 변경된 파일 목록을 이메일로 전송
  • 저장된 PDF 파일 압축 후 업로드
  • 클라우드 스토리지(예: AWS S3, Google Drive)에 업로드

 

위 설정을 기반으로 필요한 기능을 추가하거나 수정해 워크플로를 최적화할 수 있습니다.

728x90

댓글