[응용#8] 워드프레스 자동 포스팅: REST API로 글/메타/이미지 업로드

한줄 요약:
ChatGPT가 만든 리포트(final_report.md)를 자동으로 워드프레스 블로그에 업로드!
제목·본문·태그·이미지까지 REST API로 한 번에 처리하는 자동 포스팅 시스템 구축 💻


1. 목표

  • 워드프레스 REST API로 포스트 업로드 자동화
  • 카테고리, 태그, 썸네일 이미지 설정
  • ChatGPT로 생성된 리포트를 자동 게시

2. 워드프레스 자동 포스팅

1️⃣ 워드프레스 REST API 활성화

워드프레스는 기본적으로 /wp-json/wp/v2/ 경로로 REST API를 제공합니다.
예:

https://yourblog.com/wp-json/wp/v2/posts

✅ 반드시 확인

  • 관리자 계정으로 로그인 가능
  • “응용 프로그램 비밀번호(Application Password)” 발급

2️⃣ 응용 프로그램 비밀번호 발급 (WordPress ≥ 5.6)

  1. 관리자 로그인 → 사용자 → 프로필 편집
  2. 아래로 스크롤 → 응용 프로그램 비밀번호 생성
  3. 이름 입력 → “비밀번호 생성” 클릭
  4. 생성된 비밀번호를 복사해두세요 (다시 확인 불가)

3️⃣ 필수 패키지 설치

pip install requests python-dotenv markdown
  • requests: API 통신
  • python-dotenv: 환경 변수 관리
  • markdown: .md 파일 → HTML 변환

4️⃣ .env 파일 설정

루트 폴더에 .env 파일 생성 👇

WP_URL=https://yourblog.com
WP_USER=your_admin_username
WP_APP_PASS=워드프레스_응용프로그램_비밀번호

5️⃣ 완성 코드 (복붙 가능)

파일명 예시: auto_post_wp.py

import os
import requests
import markdown
from dotenv import load_dotenv
from datetime import datetime

# 1️⃣ 환경변수 불러오기
load_dotenv()
WP_URL = os.getenv("WP_URL")
WP_USER = os.getenv("WP_USER")
WP_APP_PASS = os.getenv("WP_APP_PASS")

if not all([WP_URL, WP_USER, WP_APP_PASS]):
    raise ValueError("⚠️ .env 파일에서 WP_URL, WP_USER, WP_APP_PASS 확인 필요")

# 2️⃣ 인증 설정
auth = (WP_USER, WP_APP_PASS)
api_url = f"{WP_URL}/wp-json/wp/v2/posts"

# 3️⃣ 마크다운 파일 불러오기
with open("final_report.md", "r", encoding="utf-8") as f:
    md_content = f.read()

# 4️⃣ 마크다운 → HTML 변환
html_content = markdown.markdown(md_content, extensions=["extra", "sane_lists"])

# 5️⃣ 게시글 제목/본문 구성
title = f"자동 생성 리포트 ({datetime.now().strftime('%Y-%m-%d')})"
post_data = {
    "title": title,
    "content": html_content,
    "status": "publish",       # 'draft'로 하면 임시저장
    "categories": [2],         # 카테고리 ID (워드프레스 관리자에서 확인 가능)
    "tags": [5, 9],            # 태그 ID (옵션)
}

# 6️⃣ 포스팅 요청
response = requests.post(api_url, json=post_data, auth=auth)

if response.status_code == 201:
    print(f"✅ 게시 성공! 제목: {title}")
    print(f"URL: {response.json()['link']}")
else:
    print(f"❌ 오류 발생: {response.status_code}")
    print(response.text)

6️⃣ 이미지(썸네일) 자동 업로드

def upload_image(image_path):
    media_url = f"{WP_URL}/wp-json/wp/v2/media"
    filename = os.path.basename(image_path)

    with open(image_path, "rb") as img:
        headers = {"Content-Disposition": f"attachment; filename={filename}"}
        res = requests.post(media_url, headers=headers, auth=auth, files={"file": img})

    if res.status_code == 201:
        print(f"🖼️ 이미지 업로드 성공: {res.json()['source_url']}")
        return res.json()["id"]
    else:
        print("❌ 이미지 업로드 실패:", res.text)
        return None

# 예시: 썸네일 ID를 새 글에 추가
thumb_id = upload_image("thumbnail.jpg")
if thumb_id:
    post_data["featured_media"] = thumb_id
    res = requests.post(api_url, json=post_data, auth=auth)

썸네일은 "featured_media" 키로 포스트에 연결됩니다.


7️⃣ 자동화 파이프라인 통합

모든 과정을 하나로 묶으면 이렇게 돌아가요 👇

# (1) auto_report.py 실행 → report.md 생성
# (2) llm_report.py 실행 → final_report.md 생성
# (3) auto_post_wp.py 실행 → 워드프레스 업로드

# 🔁 세 단계를 schedule로 묶으면 매일 자동 포스팅 완성!

3. 자동화 구조 요약

단계내용도구
① 크롤링 & 요약웹 데이터 수집, 요약, 키워드 추출requests + BeautifulSoup + sumy + yake
② LLM 리포트 생성자연어 분석, 인사이트 보고서ChatGPT API (Responses)
③ 워드프레스 업로드자동 포스팅REST API + Python requests
④ 예약 실행매일 정해진 시간 실행schedule / 작업 스케줄러

4. 자주 묻는 문제 해결

증상원인해결
401 Unauthorized인증 실패WP_USER, WP_APP_PASS 확인
403 ForbiddenREST API 차단플러그인/보안 설정에서 REST 허용
글은 등록되는데 HTML 깨짐Markdown 변환 누락markdown.markdown() 사용 확인
이미지 안 올라감권한 제한미디어 업로드 권한 있는 계정인지 확인

5. 체크리스트

  • .env 설정 완료 (WP_URL, WP_USER, WP_APP_PASS)
  • REST API /wp-json/wp/v2/posts 접근 확인
  • Markdown → HTML 변환 확인
  • 이미지 업로드 정상 작동
  • 게시물 자동 등록 확인

6. 요약 한 줄

ChatGPT + 워드프레스 REST API로 자동 포스팅 완성!
매일 생성된 리포트를 알아서 블로그에 업로드하자 ✅


이전 강좌 👈 [응용#7] ChatGPT API로 자연어 리포트 자동 생성하기
다음 강좌 👉 [응용#9] 전체 자동화 워크플로우 통합 (End-to-End 시스템 구축)

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.