Commit Graph

21 Commits

Author SHA1 Message Date
JOUNGWOOK KWON
fb5e6ddbdf feat: YouTube Shorts 파이프라인 완성 및 HJW TV 업로드 연동
- 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>
2026-04-06 09:27:48 +09:00
JOUNGWOOK KWON
15dfc39f0f feat: 텔레그램 이미지 첨부 기능 및 이미지 처리 개선
- /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>
2026-04-01 18:28:19 +09:00
JOUNGWOOK KWON
08e5bfc915 fix: og:image 도메인 검증 추가 및 외부 검색 이미지 제거
- og:image가 본문 이미지와 같은 도메인인지 검증하여 사이트 기본 이미지(KBS 브레드이발소 등) 차단
- DuckDuckGo 외부 검색 이미지 수집 제거, 참조 기사 소스 URL에서만 이미지 추출
- _search_real_article_image() 함수 삭제

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:11:24 +09:00
JOUNGWOOK KWON
6ad912a053 fix: 글 주제와 무관한 이미지(애니/게임/엔터) 필터링 추가 2026-04-01 09:17:34 +09:00
JOUNGWOOK KWON
1bdd212639 fix: 발행 완료된 글감을 /collect, /write 목록에서 제외
- publish() 성공 시 topics/ 에서 해당 topic 파일 자동 삭제
- /write, /collect 목록에 발행 제목 유사도 80% 필터 추가
- _load_published_titles(), _filter_unpublished() 헬퍼 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 08:55:27 +09:00
JOUNGWOOK KWON
e1fb6c954a fix: 목차를 이미지 뒤에 배치 + TOC 링크 없으면 숨김
- 목차가 대표이미지 위에 나오던 문제 수정 (이미지 → 목차 → 본문 순서)
- TOC에 실제 <a> 링크가 없으면 "목차" 제목만 나오는 현상 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 18:59:26 +09:00
JOUNGWOOK KWON
178caade3f feat: 원문 기사 이미지 DuckDuckGo 검색 + Blogger img 삽입 방식 개선
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>
2026-03-30 18:19:13 +09:00
JOUNGWOOK KWON
d9f932b333 fix: Wikipedia 이미지 태그 전체 시도, TOC h2>=3 스마트 복원
- fetch_featured_image: 태그 전체(최대 8개) 시도, 제목 제외(너무 길어 매칭 안됨)
  px 크기 regex로 일괄 800px 교체
- TOC: h2>=3 조건부 표시 복원 (완전제거→스마트 표시)
  두 파일(publisher_bot, blog_converter) 동일하게 적용

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 18:04:21 +09:00
JOUNGWOOK KWON
b98d694b65 fix: 목차 완전 제거, Wikipedia 이미지 fallback 추가
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>
2026-03-30 17:54:07 +09:00
JOUNGWOOK KWON
f3526bbcdd fix: source_image에도 플랫폼 로고 필터 적용 (근본 원인 수정)
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>
2026-03-30 17:46:45 +09:00
JOUNGWOOK KWON
ee91d83d37 fix: lh3.googleusercontent.com 필터 추가, Google News 리다이렉트 head→get 수정
- _is_platform_logo(): lh3.googleusercontent.com (Google News CDN 썸네일) 스킵 패턴 추가
- _fetch_og_image(): requests.head() → requests.get() (head는 리다이렉트 미작동)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:33:24 +09:00
JOUNGWOOK KWON
52c06e4cd4 fix: 목차(TOC)를 h2가 3개 이상일 때만 표시
짧은 글에서 '목차' 텍스트만 덩그러니 나오는 문제 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 13:59:10 +09:00
JOUNGWOOK KWON
d0cabc3f13 fix: og:image에서 플랫폼 로고(Google뉴스 등) 필터링
- _is_platform_logo(): 로고/아이콘/기본이미지 패턴 감지
- Google 뉴스 URL인 경우 실제 기사 URL로 리다이렉트 추적
- 로고 이미지 걸러지면 Pexels 폴백으로 진행

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 13:44:53 +09:00
JOUNGWOOK KWON
1c6a20e7ea feat: 블로그 글 하단에 원문 출처 링크 표시
- 본문 끝에 출처 박스 추가 (배경색 + 좌측 보더)
- sources 배열과 source_url 모두 표시
- 중복 URL 제거, 새 탭 열기(target=_blank)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 12:54:45 +09:00
JOUNGWOOK KWON
53393a6354 fix: 대표 이미지를 원본 기사 og:image 크롤링으로 변경
- 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>
2026-03-30 12:35:03 +09:00
JOUNGWOOK KWON
9280be7e52 feat: 원본 RSS 소스 이미지를 대표 이미지로 우선 사용
- RSS 수집 시 media:thumbnail, media:content, enclosure, <img> 태그에서 이미지 추출
- source_image를 topic → article → publisher로 전달
- 발행 시 우선순위: 원본 소스 이미지 → Pexels → Unsplash

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 12:22:48 +09:00
JOUNGWOOK KWON
02484679e2 feat: 블로그 대표 이미지 자동 삽입 (Pexels/Unsplash)
- 발행 시 본문에 <img>가 없으면 자동으로 대표 이미지 추가
- Pexels API (PEXELS_API_KEY 있을 때) → Unsplash Source (무료 폴백)
- 글 태그/코너 기반 키워드로 관련 이미지 검색
- Blogger가 첫 번째 <img>를 자동으로 thumbnail로 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 12:21:06 +09:00
JOUNGWOOK KWON
3e2405dff9 feat: upstream v3.2.1 기반으로 업그레이드 + eli 블로그 커스터마이징
- 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>
2026-03-30 09:21:14 +09:00
sinmb79
9b44a07a44 feat: v3.2 — YouTube Shorts 봇 + 수동 어시스트 + 보안 개선
주요 추가 기능:
- 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>
2026-03-28 17:51:02 +09:00
sinmb79
b54f8e198e feat: v3 멀티플랫폼 자동화 엔진 — 변환/배포 엔진 + 쇼츠 + README
## 변환 엔진 (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>
2026-03-25 18:15:07 +09:00
sinmb79
15eb007b5a Initial commit: 블로그 자동 수익 엔진 v2
- 수집봇: 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>
2026-03-25 06:54:43 +09:00