Files
blog-writer/CLAUDE.md
JOUNGWOOK KWON 726c593e85 feat: Reddit 수집, 쇼츠 텔레그램 미리보기, 코너 9개 체계 정비
- Reddit 트렌딩 수집기 추가 (/reddit collect, /pick 명령어)
- 쇼츠 영상 텔레그램 미리보기 후 승인 기반 YouTube 업로드
- 코너 9개로 통합 (앱추천→제품리뷰, 재테크절약→재테크, TV로보는세상/건강정보 추가)
- RSS 피드 73개로 확대 (9개 코너 전체 커버)
- 블로그 중복 검토 알림 수정, 글 잘림 방지 (max_tokens 8192)
- 제품리뷰 다중 이미지 지원, 저품질 이미지 필터링 강화
- HookOptimizer LLM 연동, 인스타/X/틱톡 스케줄러 비활성화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 13:56:20 +09:00

2.6 KiB

blog-writer

이 파일은 Claude Code가 어느 경로에서 실행되든 자동으로 로드합니다.

프로젝트 개요

  • 블로그 자동화 시스템 (수집 → AI 작성 → 변환 → 발행 → 배포)
  • 블로그: eli-ai.blogspot.com ("AI? 그게 뭔데?")
  • 운영자: eli (텔레그램으로 명령/승인)
  • 코너 9개: AI인사이트, 여행맛집, 스타트업, TV로보는세상, 제품리뷰, 생활꿀팁, 건강정보, 재테크, 팩트체크

저장소

NAS

  • 아이디: airkjw
  • 공개키: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICkbFPXF3CHi91UsWIrIsjG8srqceVm1wKrL3K1doM1V
  • 주소: nas.gru.farm:22
  • 내부 IP: 192.168.0.17
  • Docker 명령: sudo /usr/local/bin/docker (NOPASSWD)
  • Docker Compose: sudo /usr/local/bin/docker compose
  • 앱 경로: /volume2/homes/airkjw/blog-writer-app/
  • 컨테이너: blog-scheduler

배포 방법

~/.ssh/config에 Gitea용 Host nas.gru.farm(User git, Port 2222)이 있어 SCP가 안됨. 파일 전송은 반드시 아래 방식 사용:

base64 -i <로컬파일> | ssh -i ~/.ssh/id_ed25519 -p 22 -o StrictHostKeyChecking=no airkjw@nas.gru.farm "base64 -d > /volume2/homes/airkjw/blog-writer-app/<경로>"

배포 후 재시작:

ssh -i ~/.ssh/id_ed25519 -p 22 -o StrictHostKeyChecking=no airkjw@nas.gru.farm "sudo /usr/local/bin/docker restart blog-scheduler"

핵심 파일

  • bots/scheduler.py — 메인 스케줄러 + 텔레그램 봇 (2100+ LOC)
  • bots/publisher_bot.py — Blogger 발행, 이미지 처리, HTML 생성
  • bots/engine_loader.py — AI 엔진 추상화 (Claude/Gemini/Groq)
  • config/engine.json — AI엔진, TTS, 비디오, 발행 설정
  • config/schedule.json — 크론 스케줄

텔레그램 명령어

/status, /collect, /topics, /write, /pending, /approve, /reject, /idea, /topic, /report, /convert, /reload, /shorts, /images, /novel_list, /novel_gen, /novel_status, /cancelimg, /reddit, /pick

주의사항

  • Blogger 테마가 어두운 배경 → HTML 콘텐츠 작성 시 밝은 색상(#e0e0e0) 사용
  • Google News RSS URL은 NAS 컨테이너에서 리다이렉트 실패 → DuckDuckGo 폴백 사용
  • 외부 이미지 hotlink 차단 문제 → 사용자 이미지는 base64 data URI 임베딩
  • ClaudeWriter: timeout=120s, max_retries=0 (401 시 즉시 fallback)

유튜브 관련

채널명: HJW TV 채널ID: UCHu3hkjXvbKIrYNtEgl8fRA OAuth: YouTube 전용 클라이언트 (YOUTUBE_CLIENT_ID/YOUTUBE_CLIENT_SECRET/YOUTUBE_REFRESH_TOKEN)