사례 ② 블로그·SNS 발행 — 초안까지 자동, 발행은 사람이
개인 페이스북 매일 두 번 초안, 네이버 블로그 임시저장의 실제 운영 방식
공개 API가 없는 개인 SNS·블로그에 Aside로 글과 영상을 초안 저장까지 자동화하고, 마지막 발행은 사람이 확인해 누르는 안전한 흐름을 만듭니다.
예상 소요 시간 약 45분
사례 한눈에
| 사례 | 방식 | 핵심 | 실행 |
|---|---|---|---|
| A. 개인 페이스북 초안 | repl(무료) | repl 프로세스 하나를 계속 열어 두고 단계별 명령을 이어 보냄 | 매일 08:55·20:55 예약 |
| B. 네이버 블로그 임시저장 | repl / exec | 본문을 통째로 바꾸지 말 것, 저장 직전 사람 확인 | 수동 |
공통 원칙은 하나입니다. 스크립트는 절대 "게시"를 누르지 않습니다. 초안으로 저장하고, 사람이 읽은 뒤 누릅니다.
A. 개인 페이스북 초안 — repl 한 개를 계속 켜 두기
페이지(비즈니스)는 API가 있지만 개인 계정은 없습니다. 하루 두 번, 그날 올릴 쇼츠 영상과 글을 개인 계정에 초안으로 넣는 일입니다.
왜 repl을 계속 켜 두나 — 15강에서 본 것처럼 repl 한 번 호출이 끝나면 탭이 닫힙니다. 글쓰기 창 열기 → 영상 첨부 → 글 입력 → 저장은 여러 단계라, repl 프로세스 하나를 열어 두고 표준 입력으로 명령을 이어 보냅니다. 앞 단계에서 만든 도우미 함수(globalThis.H)와 탭 상태가 그대로 남습니다.
p = subprocess.Popen(["aside", "repl"], stdin=PIPE, stdout=PIPE, text=True)
def run(js): # 한 단계씩 보내고 [ok …] / [error …] 줄이 올 때까지 읽는다
p.stdin.write(js + "\n"); p.stdin.flush()
...
누르는 법 — snapshot() 트리에서 정규식으로 [ref=e번호] 를 찾고 page.locator('e번호').click() 으로 누릅니다. 화면 좌표보다 훨씬 덜 깨집니다.
영상 첨부 — 영상 파일을 세션 폴더에 하드 링크로 두고 setInputFiles 로 넣습니다(복사보다 빠르고 공간을 안 씀).
멈추는 조건 — 로그인 화면, 보안 확인(체크포인트·캡차)이 보이면 즉시 멈추고 알립니다. 사람처럼 천천히 입력합니다.
함정 — 페이스북은 개인 초안을 하나만 보관합니다. 새 초안이 이전 초안을 덮으니, 사람이 확인·게시한 뒤 다음 회차가 돌도록 시간을 둡니다.
B. 네이버 블로그 임시저장
글은 Claude가 만들고, Aside는 네이버 에디터에 임시저장까지만 합니다(9강의 흐름을 스크립트로 옮긴 것).
함정 — 본문 통째 바꾸기 금지. 이미 올린 글을 고칠 때 에디터 본문 전체를 한 번에 바꾸면 이미지·링크 카드가 깨진 일이 있습니다. 문단 단위로 고치고, 저장 전에 화면을 보여 주게 하세요.
함정 — 반복문 안에서 에이전트 부르기. 셸 while read 반복문 안에서 aside exec 를 부르면 에이전트가 표준 입력을 먹어 반복이 한 번만 돌고 끝납니다. 목록은 파이썬에서 돌리거나 < /dev/null 을 붙이세요.
예약 실행으로 묶기
매일 같은 시각에 돌리려면 macOS 예약(launchd)에 올립니다. 두 가지를 꼭 넣으세요.
- PATH에
~/.local/bin(없으면aside를 못 찾아 조용히 실패) - 실행 전 Aside 켜기와 로그인 확인 —
open -a Aside뒤aside memory list가 응답할 때까지 대기
🧪 실습
실습 미션 — 내 SNS 하나에 초안 저장까지
- repl 프로세스 하나로 ① 글쓰기 창 열기 ② 글 입력 두 단계를 이어 보냈다
- 게시 버튼은 누르지 않고 초안·임시저장으로 끝냈다
- 로그인 화면이 보이면 멈추는 조건을 스크립트에 넣었다
오늘의 체크리스트
- 여러 단계는 repl 프로세스 하나를 켜 두고
- 게시는 사람, 스크립트는 초안까지
- 본문 통째 바꾸기 금지, 반복문 안 exec 주의