LESSON 17

사례 ② 블로그·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 주의