파이썬으로 업로드 자동화: 기본 순서와 뼈대 코드
전략
- 가능하면 공식 API 또는 허용된 자동화 방식을 사용
- 초안/예약 발행을 기본으로 하고, 검수 후 공개 전환
- 에러·중복 업로드를 막는 로그와 재시도 로직 포함
공통 절차(플랫폼 불문)
1) 앱 등록/토큰 발급
- 개발자 콘솔에서 애플리케이션 등록
- OAuth 또는 API 키 발급, 권한 범위(Post/Media) 확인
2) 글/이미지 준비
- 제목, 본문(HTML/마크다운/플레인텍스트), 카테고리/태그
- 이미지 파일 경로 또는 URL
3) 업로드 API 호출
- 이미지 먼저 업로드 → 반환된 media_id를 본문에 삽입
- 글 본문 POST 요청(초안 또는 비공개)
4) 예약/공개 전환
- 예약 시간 설정 또는 초안→공개 전환 API 호출
5) 로그·예외 처리
- 성공/실패 로그 저장, 429/5xx 재시도
- 중복 방지용 해시 저장(제목+본문 요약)
예시 코드 뼈대
(설명용, 실제 엔드포인트·파라미터는 플랫폼 문서 확인)
import time, hashlib, json, os
import requests
API_BASE = "https://api.example.com" # 플랫폼의 실제 API 베이스 URL로 변경
ACCESS_TOKEN = os.getenv("ACCESS_TOKEN")
def make_hash(title, body):
return hashlib.sha256((title + body [:200]). encode("utf-8")). hexdigest()
def upload_image(path):
url = f"{API_BASE}/media/upload"
headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
with open(path, "rb") as f:
files = {"file": f}
r = requests.post(url, headers=headers, files=files, timeout=30)
r.raise_for_status()
return r.json()["media_id"]
def create_post(title, body, tags=None, media_ids=None, draft=True, publish_at=None):
url = f"{API_BASE}/posts"
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json",
}
payload = {
"title": title,
"body": body,
"tags": tags or [],
"media_ids": media_ids or [],
"status": "draft" if draft else "publish",
}
if publish_at:
payload ["publish_at"] = publish_at # ISO8601 문자열
r = requests.post(url, headers=headers, data=json.dumps(payload), timeout=30)
if r.status_code == 429:
time.sleep(5)
return create_post(title, body, tags, media_ids, draft, publish_at)
r.raise_for_status()
return r.json()
def main():
title = "샘플 제목"
body = "<p> 본문입니다. 이미지도 함께 </p>"
tags = ["자동화", "파이썬"]
media_id = upload_image("cover.jpg")
res = create_post(title, body, tags=tags, media_ids=[media_id], draft=True)
print("Draft created:", res.get("id"))
if __name__ == "__main__":
main()
실무 팁
- 환경변수에 토큰 저장(코드에 직접 넣지 않기)
- 요청 실패 시 백오프(지수적 딜레이) 적용
- 본문은 HTML 태그 최소화, 서브헤딩과 목록 중심(가독성↑)
- 예약 발행으로 ‘매일 같은 시간’ 리듬 유지
이미지 업로드 없이 글만 올리는 간단 버전
def post_text_only(title, body):
# 권한/엔드포인트 문서에 맞춰 최소 파라미터로 POST
...
자동화 전 체크
- 테스트 계정으로 먼저 수행
- 약관의 자동화 허용 범위 확인(요청 빈도, 스크래핑 금지 조항 등)
- 초안 생성 → 수동 검수 → 공개 전환을 기본 플로우로
'사회' 카테고리의 다른 글
매일 배우는 타로 카드 (29 일째), 카드 : 6. 지팡이 6 (Six of Wands) (4) | 2025.09.09 |
---|---|
미래를 위한 현명한 선택, 달러 투자 첫걸음! (1편) (4) | 2025.09.09 |
매일 배우는 타로 카드(28일째),카드: 지팡이 5 (Five of Wands) (0) | 2025.09.08 |
매일 배우는 타로카드(27일째), 카드4번: 지팡이 4 (Four of Wands) (2) | 2025.09.07 |
매일 배우는 타로 카드(26일차),카드 3번:지팡이 3 (Three of Wands) (3) | 2025.09.06 |