- 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>
- youtube_uploader.py: YOUTUBE_REFRESH_TOKEN/CLIENT_ID/CLIENT_SECRET 환경변수 폴백 추가
(token.json 없는 Docker 환경에서 브랜드 계정 인증 가능)
- shorts_config.json: corners_eligible를 실제 블로그 코너명으로 수정
- caption_renderer.py: render_captions() 반환값 누락 수정
- get_token.py: web→installed 타입 변환, port 8080 고정, prompt=consent 추가
- get_youtube_token.py: YouTube 전용 OAuth 토큰 발급 스크립트 (별도 클라이언트)
- CLAUDE.md: 프로젝트 개요, 배포 방법, 핵심 파일, YouTube 채널 정보 추가
- publisher_bot.py: 이미지 분산 배치, SEO 검증, 버그 수정
- scheduler.py: 알림 강화, atomic write, 중복 방지, hot reload 개선
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- /idea, /topic 명령어에 최대 3장 이미지 첨부 기능 추가
- 1장: 본문 최상단 배치, 2~3장: 본문 중간 균등 분산 배치
- base64 data URI 임베딩으로 핫링크 차단 문제 해결
- Claude API timeout=120s, max_retries=0 설정 (401 무한대기 방지)
- DuckDuckGo 제목 검색 폴백 및 문화/엔터 섹션 이미지 필터링
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- og:image가 본문 이미지와 같은 도메인인지 검증하여 사이트 기본 이미지(KBS 브레드이발소 등) 차단
- DuckDuckGo 외부 검색 이미지 수집 제거, 참조 기사 소스 URL에서만 이미지 추출
- _search_real_article_image() 함수 삭제
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- publish() 성공 시 topics/ 에서 해당 topic 파일 자동 삭제
- /write, /collect 목록에 발행 제목 유사도 80% 필터 추가
- _load_published_titles(), _filter_unpublished() 헬퍼 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. _search_real_article_image(): DuckDuckGo HTML 검색으로 원문 기사 URL 찾기
- Google News 소스 제목 → DDG 검색 → 실제 URL → og:image
- DDG redirect URL(uddg 파라미터)에서 실제 URL 추출
2. build_full_html(): 이미지를 div 래핑 없이 body_html 맨 앞에 직접 삽입
- Blogger가 div class를 제거하는 문제 해결
3. fetch_featured_image() 우선순위 변경:
RSS이미지 → og:image → DDG검색(원문) → Pexels → Wikipedia
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- fetch_featured_image: 태그 전체(최대 8개) 시도, 제목 제외(너무 길어 매칭 안됨)
px 크기 regex로 일괄 800px 교체
- TOC: h2>=3 조건부 표시 복원 (완전제거→스마트 표시)
두 파일(publisher_bot, blog_converter) 동일하게 적용
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. publisher_bot.py + blog_converter.py: 목차(TOC) 완전 비활성화
2. fetch_featured_image(): Wikipedia REST API로 무료 이미지 fallback
- 제목/태그로 한국어 Wikipedia 검색 → 썸네일 추출
- 실패 시 영문 Wikipedia 시도 (최대 4개 키워드)
- 200px 썸네일 → 800px 고해상도로 교체
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
NAS IP에서 Google News RSS URL이 200 응답하며 og:image에 lh3.googleusercontent.com
썸네일을 반환하는 문제. 두 곳 모두 차단:
- fetch_featured_image(): source_image에 _is_platform_logo() 체크 추가
- _fetch_sources_content(): og:image 저장 전 플랫폼 로고 패턴 필터 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- _is_platform_logo(): 로고/아이콘/기본이미지 패턴 감지
- Google 뉴스 URL인 경우 실제 기사 URL로 리다이렉트 추적
- 로고 이미지 걸러지면 Pexels 폴백으로 진행
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 본문 끝에 출처 박스 추가 (배경색 + 좌측 보더)
- sources 배열과 source_url 모두 표시
- 중복 URL 제거, 새 탭 열기(target=_blank)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Unsplash Source API 중단으로 기존 폴백 작동 안 함
- 원본 기사 URL에서 og:image / twitter:image 크롤링 (가장 확실)
- 우선순위: RSS 이미지 → og:image 크롤링 → Pexels API
- lxml 파서 사용 (이미 Docker에 설치됨)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- RSS 수집 시 media:thumbnail, media:content, enclosure, <img> 태그에서 이미지 추출
- source_image를 topic → article → publisher로 전달
- 발행 시 우선순위: 원본 소스 이미지 → Pexels → Unsplash
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 발행 시 본문에 <img>가 없으면 자동으로 대표 이미지 추가
- Pexels API (PEXELS_API_KEY 있을 때) → Unsplash Source (무료 폴백)
- 글 태그/코너 기반 키워드로 관련 이미지 검색
- Blogger가 첫 번째 <img>를 자동으로 thumbnail로 사용
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- upstream sinmb79/blog-writer v3.2.1 코드 베이스 적용
- config_resolver, CLI, writer_bot, shorts pipeline 등 신규 기능 포함
- load_dotenv Windows 경로 → Docker 호환 load_dotenv() 변경 (25개 파일)
- runtime_guard.py Docker 환경 bypass 추가
- config/blogs.json: eli-ai 블로그 정체성 (8개 카테고리)
- config/sources.json: 38개 RSS 소스 유지
- config/engine.json: writing provider → gemini (2.5-flash)
- config/safety_keywords.json: 모든 글 수동 승인 (score 101)
- bots/scheduler.py: 시스템 프롬프트 eli 블로그 기준으로 업데이트
- bots/publisher_bot.py: .env refresh token OAuth 폴백 로직 추가
- requirements.txt: google-generativeai, groq 활성화
- Dockerfile + docker-compose.yml: NAS Docker 배포 설정
- CLAUDE.md: 프로젝트 메타데이터
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
주요 추가 기능:
- bots/shorts/ 서브모듈 7개: tts_engine, script_extractor, asset_resolver,
stock_fetcher, caption_renderer, video_assembler, youtube_uploader
- bots/shorts_bot.py: 6단계 Shorts 파이프라인 오케스트레이터
(auto/semi_auto 두 가지 생산 모드, CLI 지원)
- bots/writer_bot.py: 독립 실행형 AI 글쓰기 봇 (대시보드 연동)
- bots/assist_bot.py: URL 기반 수동 어시스트 파이프라인
- config/shorts_config.json: Shorts 전체 설정
- templates/shorts/extract_prompt.txt: LLM 스크립트 추출 프롬프트
- scheduler.py에 shorts 잡(10:35/16:00) + /shorts Telegram 명령 추가
보안 개선:
- .env 파일 외부 경로 참조로 변경 (load_dotenv dotenv_path, 24개 파일)
- .gitignore에 민감 파일/내부 문서/런타임 데이터 항목 추가
문서:
- README.md 전면 재작성 (상세 한글 설명, 설치/설정/사용법 포함)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
## 변환 엔진 (bots/converters/)
- blog_converter: HTML 자동감지 + Schema.org JSON-LD + AdSense 플레이스홀더
- card_converter: Pillow 1080×1080 인스타그램 카드 이미지
- thread_converter: X 스레드 280자 자동 분할
- newsletter_converter: 주간 HTML 뉴스레터
- shorts_converter: TTS + ffmpeg 뉴스앵커 쇼츠 영상 (1080×1920)
## 배포 엔진 (bots/distributors/)
- image_host: ImgBB 업로드 / 로컬 HTTP 서버
- instagram_bot: Instagram Graph API (컨테이너 → 폴링 → 발행)
- x_bot: X API v2 OAuth1 스레드 게시
- tiktok_bot: TikTok Content Posting API v2 청크 업로드
- youtube_bot: YouTube Data API v3 재개가능 업로드
## 기타
- article_parser: KEY_POINTS 파싱 추가 (SNS/TTS용 핵심 3줄)
- publisher_bot: HTML 본문 직접 발행 지원
- scheduler: 시차 배포 스케줄 + Telegram 변환/배포 명령 추가
- remote_claude: Claude Agent SDK Telegram 연동
- templates/shorts_template.json: 코너별 색상/TTS/트랜지션 설정
- scripts/download_fonts.py: NotoSansKR / 맑은고딕 자동 설치
- .gitignore: .claude/, 기획문서, 생성 미디어 파일 추가
- .env.example: 플레이스홀더 텍스트 (실제 값 없음)
- README: v3 아키텍처 전체 문서화 (설치/API키/상세설명/FAQ)
- requirements.txt: openai, pydub 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 수집봇: Google Trends, GitHub Trending, HN, Product Hunt, RSS 수집
+ 품질 점수(0-100) 시스템 + 6가지 폐기 규칙
- 발행봇: Blogger API v3 자동 발행 + 안전장치(팩트체크/위험키워드)
- 링크봇: 쿠팡 파트너스 HMAC 서명 + 자동 링크 삽입
- 분석봇: 색인률/CTR/14일성과 등 5대 핵심 지표 + Telegram 리포트
- 이미지봇: manual/request/auto 3가지 모드
request 모드 — 주기적 프롬프트 전송 → Telegram으로 이미지 수령
- 스케줄러: APScheduler + Telegram 봇 명령 리스너
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>