엑셀 피벗 테이블 클릭 노가다 끝! 파이썬으로 자동 생성하기
"매일 수집한 환율·날씨 데이터를 자동으로 블로그에 발행하고 싶다", "엑셀에 정리된 상품 정보를 쇼핑몰 블로그에 자동으로 올리고 싶다", "예약 발행 글을 코드로 일괄 등록하고 싶다"…
워드프레스는 REST API를 기본으로 지원합니다. 파이썬으로 이 API를 호출하면 글 작성, 카테고리·태그 설정, 이미지 업로드, 예약 발행까지 모두 자동화할 수 있습니다. 별도 플러그인 없이 워드프레스 기본 기능만으로 구현됩니다.
파이썬에서 워드프레스 API를 사용하려면 일반 로그인 비밀번호가 아닌 앱 비밀번호를 발급받아야 합니다.
내사이트.com/wp-admin)에 로그인합니다.⚠️ 주의: 앱 비밀번호 기능은 워드프레스 5.6 이상에서 기본 지원됩니다. "애플리케이션 비밀번호" 섹션이 보이지 않는다면 사이트가 HTTPS를 사용하는지 확인하세요. HTTP 사이트에서는 보안상 이유로 비활성화됩니다.
터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install requests
워드프레스 REST API는 HTTP 요청 방식으로 동작하기 때문에 requests 라이브러리만 있으면 됩니다. 이미 설치되어 있다면 넘어가도 됩니다.
아래 코드를 그대로 복사해서 메모장에 붙여넣고, wp_post.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import requests
from requests.auth import HTTPBasicAuth
from datetime import datetime, timedelta
import json
# ① 설정
WP_URL = "https://내사이트.com" # ← 워드프레스 사이트 주소
WP_USER = "관리자아이디" # ← 워드프레스 로그인 아이디
WP_PASS = "xxxx xxxx xxxx xxxx xxxx xxxx" # ← 1단계에서 발급받은 앱 비밀번호
AUTH = HTTPBasicAuth(WP_USER, WP_PASS)
API_BASE = f"{WP_URL}/wp-json/wp/v2"
# ② 카테고리 ID 조회 함수
def get_category_id(category_name):
res = requests.get(f"{API_BASE}/categories",
params={"search": category_name}, auth=AUTH)
cats = res.json()
if cats:
return cats[0]["id"]
# 없으면 새로 생성
res = requests.post(f"{API_BASE}/categories",
json={"name": category_name}, auth=AUTH)
return res.json().get("id")
# ③ 태그 ID 조회 함수
def get_tag_ids(tag_names):
tag_ids = []
for tag in tag_names:
res = requests.get(f"{API_BASE}/tags",
params={"search": tag}, auth=AUTH)
tags = res.json()
if tags:
tag_ids.append(tags[0]["id"])
else:
res = requests.post(f"{API_BASE}/tags",
json={"name": tag}, auth=AUTH)
tag_ids.append(res.json().get("id"))
return tag_ids
# ④ 글 발행 함수
def publish_post(title, content, category=None, tags=None,
status="publish", schedule_date=None):
"""
title : 글 제목
content : 글 본문 (HTML 형식 가능)
category : 카테고리 이름 (없으면 기본 카테고리)
tags : 태그 이름 리스트 (예: ["파이썬", "자동화"])
status : "publish"(즉시) / "draft"(임시저장) / "future"(예약)
schedule_date : 예약 발행 시 날짜 (예: "2026-07-01T09:00:00")
"""
post_data = {
"title": title,
"content": content,
"status": status,
}
if category:
cat_id = get_category_id(category)
if cat_id:
post_data["categories"] = [cat_id]
if tags:
tag_ids = get_tag_ids(tags)
post_data["tags"] = tag_ids
if status == "future" and schedule_date:
post_data["date"] = schedule_date
res = requests.post(f"{API_BASE}/posts",
json=post_data, auth=AUTH)
if res.status_code in (200, 201):
post = res.json()
print(f" ✔ 발행 완료: {post['title']['rendered']}")
print(f" ✔ URL: {post['link']}")
return post
else:
print(f" ✘ 발행 실패: {res.status_code} / {res.text[:200]}")
return None
# ⑤ 실행: 글 발행 예시
now = datetime.now().strftime("%Y년 %m월 %d일")
# 즉시 발행
result = publish_post(
title = f"오늘의 업무 자동화 일지 ({now})",
content = """오늘 자동화 완료 목록
파이썬 자동화로 오늘도 업무를 효율적으로 처리했습니다.
""", category = "업무자동화", tags = ["파이썬", "자동화", "IT꿀팁"], status = "publish", ) print(f"\n✅ 완료!")WP_URL에 워드프레스 사이트 주소를, WP_USER에 관리자 아이디를, WP_PASS에 앱 비밀번호를 입력합니다.title, content, category, tags를 원하는 내용으로 수정합니다.python wp_post.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 발행 완료: 오늘의 업무 자동화 일지 (2026년 06월 15일) ✔ URL: https://내사이트.com/오늘의-업무-자동화-일지 ✅ 완료!
오류 1: 401 Unauthorized
앱 비밀번호가 잘못되었거나 REST API가 비활성화된 경우입니다. 앱 비밀번호에 공백이 포함되어 있는지 확인하세요. 워드프레스가 발급하는 앱 비밀번호는 "xxxx xxxx xxxx xxxx xxxx xxxx" 형태로 공백 포함이 정상입니다. 코드에 그대로 입력하면 됩니다.
오류 2: 404 Not Found (REST API 경로 오류)
워드프레스 REST API가 비활성화된 경우입니다. 관리자 페이지 → "설정" → "고유주소"에서 "글 이름"으로 설정하면 REST API가 활성화됩니다. 기본(Plain) 설정에서는 REST API가 작동하지 않습니다.
오류 3: 본문에 HTML이 적용되지 않고 태그가 그대로 출력됨
워드프레스 테마나 플러그인이 HTML을 필터링하는 경우입니다. 관리자 계정으로 발행하면 대부분 HTML이 그대로 적용됩니다. 에디터 설정에서 "비주얼 편집기 비활성화"가 체크되어 있는지도 확인하세요.
코드 ⑤ 실행 부분의 status를 "future"로 바꾸고 schedule_date를 지정하면 예약 발행이 됩니다.
# 내일 오전 9시 예약 발행
tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%dT09:00:00")
publish_post(
title = "내일 발행될 자동화 포스팅",
content = "예약 발행 테스트입니다.
",
category = "업무자동화",
tags = ["파이썬", "자동화"],
status = "future",
schedule_date = tomorrow,
)
💡 이전 게시글과 결합하면: 날씨 데이터 수집 편이나 주식·환율 수집 편으로 데이터를 모은 뒤 이 코드로 블로그에 자동 발행하면, 데이터 수집부터 포스팅까지 완전 무인 자동화가 완성됩니다. 스케줄러 편과 결합하면 매일 정해진 시간에 자동으로 포스팅까지 됩니다.
이 코드를 응용하면 썸네일 이미지를 자동으로 업로드해 대표 이미지로 설정하거나, 엑셀 목록에서 여러 글을 한꺼번에 예약 발행하는 것도 가능합니다.