네이버 블로그 자동 게시 설계 v1

네이버 블로그 자동 게시 설계

2026-07-27 · 집계 앱 v2 대상 · 공식 API 없음 — 2트랙(반자동/완전자동)

1. 목표

앱에 기록을 저장하는 순간 네이버 블로그 운동 카테고리에 올릴 글감(제목 + 캡쳐 이미지)이 자동으로 완성되어, 사용자는 최소 동작(붙여넣기 + 발행)만으로 게시를 마친다. 관리자는 로컬 스크립트로 발행까지 완전 자동화한다. 제로-DB 원칙은 그대로 — 서버 없이 브라우저(와 관리자 PC) 안에서만 동작한다.

2. 전제 조사

게시 템플릿 (블로그 실측 분석)운동 카테고리(categoryNo=150)의 일일 기록 글:

요소형식예시
제목YY.MM.DD - X.XKM (날짜 + 거리)26.07.28 - 3.2KM
본문러닝 앱 캡쳐 이미지 1장 (텍스트 없음)
카테고리운동 (categoryNo=150)

→ 제목·본문 모두 앱이 이미 가진 데이터(date, distance_km, IndexedDB 캡쳐)로 100% 자동 생성 가능.

게시 수단 비교 — 네이버 블로그 글쓰기 공식 API(writePost.json)는 스팸 남용으로 2020-05-06 종료. 현재 외부 프로그램의 공식 게시 경로는 없다.

수단상태판단
공식 글쓰기 API2020-05 종료불가
MetaWeblog/XML-RPC종료불가
브라우저 자동화 (Playwright)가능약관 회색지대 · 계정 제재 리스크 → 관리자 전용 소량 사용
글감 완성 + 글쓰기 창 오픈 (반자동)가능리스크 없음 → 일반 사용자 기본 경로

3. 방식 결정

항목결정근거
구조2트랙 — 트랙 A(반자동, 앱 내) + 트랙 B(완전자동, 로컬 스크립트)공식 API 부재. 일반 사용자에게 자동화 리스크를 지우지 않고, 관리자는 본인 책임 하에 완전 자동
제목 규칙YY.MM.DD - X.XKM (거리 소수 1자리 고정)기존 게시글 제목 형식 표준화 (표기 편차 정규화)
이미지 전달클립보드 복사(PC, PNG 변환) / Web Share(모바일) / 다운로드(폴백)스마트에디터는 본문 붙여넣기·공유 첨부를 지원. 파일을 서버에 올리지 않음(제로-DB)
글쓰기 진입blog.naver.com/{blogId}?Redirect=Write&categoryNo={n}실측 검증 — 비로그인 시에도 로그인 후 해당 주소로 복귀하며 categoryNo가 보존됨
발행 상태 추적레코드에 blog_posted_at(ISO, nullable) 추가미발행 목록·중복 발행 방지의 기준. 내보내기→가져오기 왕복에서 보존(스키마 v2.0 유지)
설정 저장run.blog.v1 → blogId·categoryNo·autoOpen (localStorage)드라이브 설정과 같은 패턴. 코드에 하드코딩하지 않음
트랙 B 로그인Playwright persistent context 재사용 — 자동 로그인 코드 없음최초 1회 수동 로그인 후 세션만 재사용. 캡차·보안 차단 회피, 자격증명 저장·입력 금지

4. 트랙 A: 반자동 발행 흐름 (M1)

[기록 저장 (단건 · 신규)]
  → 글감 모달 자동 오픈 (blogId 설정 + autoOpen 켜짐일 때)
       제목: 26.07.28 - 3.2KM  [📋 제목 복사]
       캡쳐 미리보기
       [🖼 이미지 복사]  (모바일: [📤 이미지·제목 공유])
       [✍ 네이버 글쓰기 열기]  ← 새 창, categoryNo 지정
  → 에디터에서: 본문 Ctrl+V(이미지) → 제목 붙여넣기 → 발행
  → 앱으로 돌아와 [✅ 발행 완료로 표시] → blog_posted_at 기록
  → 데이터 뷰: 발행 배지 · 미발행 글감 목록에서 언제든 재발행

5. 트랙 B: 완전 자동 발행 흐름 (M2 · 관리자 전용)

[앱: 정본 내보내기 running_records.json]
  → node scripts/blog-auto-post.mjs --json running_records.json --images 기록/
       (--login: 최초 1회 헤드풀 수동 로그인 — 세션만 저장)
  → 대상 선별: blog_posted_at 없음 + 캡쳐 파일 매칭
  → 글쓰기 진입 → 제목 입력(동일 규칙) → 이미지 첨부 → 카테고리 150
  → 기본 dry-run: 발행 직전 정지 + 스크린샷 (--publish 시에만 실제 발행)
  → 발행 확인(PostView URL) → JSON에 blog_posted_at 기록(.bak 백업 후 건별 저장)
  → 앱 'JSON 가져오기'로 불러오면 발행 배지 반영 (앱 코드 변경 불필요)

안전장치: dry-run 기본 · --limit 기본 1(상한 5) · 건당 5~10초 대기 · 실패 시 즉시 전체 중단(중복 발행 방지) · 캡차/보안 페이지 감지 시 중단 · 로그인 리다이렉트 감지 시 --login 안내 후 종료.

6. 보안 · 리스크

7. 사전 준비

  1. 앱의 데이터 · 내보내기 → 네이버 블로그 ⚙ 설정에 블로그 ID(예: nevertheless-jos)와 카테고리 번호(예: 150) 입력 — 카테고리 번호는 블로그 카테고리 링크의 categoryNo= 값.
  2. (트랙 B, 관리자만) Node.js 설치 → cd scripts && npm installnode blog-auto-post.mjs --login으로 최초 1회 수동 로그인.
ℹ️ 설정값은 이 브라우저의 localStorage에만 저장되며 서버로 전송되지 않습니다.

8. 마일스톤

9. 한계 (M1)