한줄 요약:
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)
- 관리자 로그인 → 사용자 → 프로필 편집
- 아래로 스크롤 → 응용 프로그램 비밀번호 생성
- 이름 입력 → “비밀번호 생성” 클릭
- 생성된 비밀번호를 복사해두세요 (다시 확인 불가)
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 Forbidden | REST 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 시스템 구축)