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>
This commit is contained in:
@@ -3,12 +3,13 @@
|
||||
{
|
||||
"id": "main",
|
||||
"blog_id": "${BLOG_MAIN_ID}",
|
||||
"name": "테크인사이더",
|
||||
"persona": "tech_insider",
|
||||
"domain": "",
|
||||
"name": "AI? 그게 뭔데?",
|
||||
"persona": "eli",
|
||||
"domain": "eli-ai.blogspot.com",
|
||||
"tagline": "어렵지 않아요, 그냥 읽어봐요",
|
||||
"active": true,
|
||||
"phase": 1,
|
||||
"labels": ["쉬운세상", "숨은보물", "바이브리포트", "팩트체크", "한컷"]
|
||||
"labels": ["AI인사이트", "여행맛집", "스타트업", "제품리뷰", "생활꿀팁", "앱추천", "재테크절약", "팩트체크"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"_comment": "The 4th Path 블로그 자동 수익 엔진 — 엔진 설정 (v3)",
|
||||
"_updated": "2026-03-29",
|
||||
"writing": {
|
||||
"provider": "openclaw",
|
||||
"provider": "gemini",
|
||||
"_comment_provider": "openclaw=ChatGPT Pro(OAuth), claude_web=Claude Max(웹쿠키), gemini_web=Gemini Pro(웹쿠키), claude=Anthropic API키, gemini=Google AI API키",
|
||||
"options": {
|
||||
"openclaw": {
|
||||
@@ -26,7 +26,7 @@
|
||||
},
|
||||
"gemini": {
|
||||
"api_key_env": "GEMINI_API_KEY",
|
||||
"model": "gemini-2.5-pro",
|
||||
"model": "gemini-2.5-flash",
|
||||
"max_tokens": 4096,
|
||||
"temperature": 0.7
|
||||
}
|
||||
@@ -78,8 +78,13 @@
|
||||
"provider": "smart_router",
|
||||
"options": {
|
||||
"smart_router": {
|
||||
"priority": ["kling_free", "veo3", "seedance2", "ffmpeg_slides"],
|
||||
"daily_cost_limit_usd": 0.50,
|
||||
"priority": [
|
||||
"kling_free",
|
||||
"veo3",
|
||||
"seedance2",
|
||||
"ffmpeg_slides"
|
||||
],
|
||||
"daily_cost_limit_usd": 0.5,
|
||||
"prefer_free_first": true,
|
||||
"fallback": "ffmpeg_slides"
|
||||
},
|
||||
@@ -191,11 +196,11 @@
|
||||
"analytics": "22:00"
|
||||
},
|
||||
"brand": {
|
||||
"name": "The 4th Path",
|
||||
"sub": "Independent Tech Media",
|
||||
"by": "by 22B Labs",
|
||||
"url": "the4thpath.com",
|
||||
"cta": "팔로우하면 매일 이런 정보를 받습니다"
|
||||
"name": "AI? 그게 뭔데?",
|
||||
"sub": "eli의 쉽고 재미있는 이야기",
|
||||
"by": "by eli",
|
||||
"url": "eli-ai.blogspot.com",
|
||||
"cta": "구독하면 매일 쉽고 재미있는 정보를 받습니다"
|
||||
},
|
||||
"optional_keys": {
|
||||
"KLING_API_KEY": "Kling 3.0 AI 영상 생성 (66 무료 크레딧/일)",
|
||||
@@ -204,4 +209,4 @@
|
||||
"GEMINI_API_KEY": "Google Gemini 글쓰기 / Veo 영상",
|
||||
"RUNWAY_API_KEY": "Runway Gen-3 AI 영상 생성"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"legal_keywords": [
|
||||
"불법", "위법", "처벌", "벌금", "징역", "기소"
|
||||
],
|
||||
"always_manual_review": ["팩트체크"],
|
||||
"always_manual_review": ["팩트체크", "재테크절약"],
|
||||
"min_sources_required": 2,
|
||||
"min_quality_score_for_auto": 75
|
||||
"min_quality_score_for_auto": 101
|
||||
}
|
||||
|
||||
@@ -1,38 +1,62 @@
|
||||
{
|
||||
"rss_feeds": [
|
||||
{
|
||||
"name": "GeekNews",
|
||||
"url": "https://feeds.feedburner.com/geeknews-feed",
|
||||
"category": "tech",
|
||||
"trust_level": "high"
|
||||
},
|
||||
{
|
||||
"name": "ZDNet Korea",
|
||||
"url": "https://www.zdnet.co.kr/rss/rss.php",
|
||||
"category": "tech",
|
||||
"trust_level": "high"
|
||||
},
|
||||
{
|
||||
"name": "Yonhap IT",
|
||||
"url": "https://www.yna.co.kr/rss/it.xml",
|
||||
"category": "tech",
|
||||
"trust_level": "high"
|
||||
},
|
||||
{
|
||||
"name": "Bloter",
|
||||
"url": "https://www.bloter.net/feed",
|
||||
"category": "tech",
|
||||
"trust_level": "high"
|
||||
}
|
||||
{ "name": "GeekNews", "url": "https://feeds.feedburner.com/geeknews-feed", "category": "AI인사이트", "trust_level": "high" },
|
||||
{ "name": "ZDNet Korea", "url": "https://www.zdnet.co.kr/rss/rss.php", "category": "AI인사이트", "trust_level": "high" },
|
||||
{ "name": "연합뉴스 IT", "url": "https://www.yna.co.kr/rss/it.xml", "category": "AI인사이트", "trust_level": "high" },
|
||||
{ "name": "AI타임스", "url": "https://www.aitimes.com/rss/allArticle.xml", "category": "AI인사이트", "trust_level": "medium" },
|
||||
{ "name": "테크크런치 AI", "url": "https://techcrunch.com/category/artificial-intelligence/feed/", "category": "AI인사이트", "trust_level": "high" },
|
||||
{ "name": "MIT 테크리뷰", "url": "https://www.technologyreview.com/feed/", "category": "AI인사이트", "trust_level": "high" },
|
||||
{ "name": "전자신문", "url": "https://www.etnews.com/rss/rss.xml", "category": "AI인사이트", "trust_level": "high" },
|
||||
|
||||
{ "name": "Bloter", "url": "https://www.bloter.net/feed", "category": "스타트업", "trust_level": "high" },
|
||||
{ "name": "플래텀", "url": "https://platum.kr/feed", "category": "스타트업", "trust_level": "high" },
|
||||
{ "name": "벤처스퀘어", "url": "https://www.venturesquare.net/feed", "category": "스타트업", "trust_level": "medium" },
|
||||
{ "name": "한국경제 IT", "url": "https://www.hankyung.com/feed/it", "category": "스타트업", "trust_level": "high" },
|
||||
{ "name": "테크크런치 스타트업","url": "https://techcrunch.com/category/startups/feed/", "category": "스타트업", "trust_level": "high" },
|
||||
{ "name": "IT동아", "url": "https://it.donga.com/rss/", "category": "스타트업", "trust_level": "medium" },
|
||||
|
||||
{ "name": "연합뉴스 여행", "url": "https://www.yna.co.kr/rss/travel.xml", "category": "여행맛집", "trust_level": "high" },
|
||||
{ "name": "경향신문 여행", "url": "https://www.khan.co.kr/rss/rssdata/kh_travel.xml", "category": "여행맛집", "trust_level": "medium" },
|
||||
{ "name": "한국관광공사", "url": "https://kto.visitkorea.or.kr/rss/rss.kto", "category": "여행맛집", "trust_level": "medium" },
|
||||
{ "name": "대한항공 뉴스", "url": "https://www.koreanair.com/content/koreanair/global/en/footer/about-korean-air/news-and-pr/press-releases.rss.xml", "category": "여행맛집", "trust_level": "medium" },
|
||||
{ "name": "론리플래닛", "url": "https://www.lonelyplanet.com/news/feed", "category": "여행맛집", "trust_level": "medium" },
|
||||
|
||||
{ "name": "ITWorld Korea", "url": "https://www.itworld.co.kr/rss/feed", "category": "제품리뷰", "trust_level": "medium" },
|
||||
{ "name": "디지털데일리", "url": "https://www.ddaily.co.kr/rss/rss.xml", "category": "제품리뷰", "trust_level": "medium" },
|
||||
{ "name": "The Verge", "url": "https://www.theverge.com/rss/index.xml", "category": "제품리뷰", "trust_level": "high" },
|
||||
{ "name": "Engadget", "url": "https://www.engadget.com/rss.xml", "category": "제품리뷰", "trust_level": "high" },
|
||||
|
||||
{ "name": "위키트리", "url": "https://www.wikitree.co.kr/rss/", "category": "생활꿀팁", "trust_level": "medium" },
|
||||
{ "name": "오마이뉴스 라이프", "url": "https://rss2.ohmynews.com/rss/ohmyrss.xml", "category": "생활꿀팁", "trust_level": "medium" },
|
||||
{ "name": "헬스조선", "url": "https://health.chosun.com/site/data/rss/rss.xml", "category": "생활꿀팁", "trust_level": "medium" },
|
||||
{ "name": "조선일보 라이프", "url": "https://www.chosun.com/arc/outboundfeeds/rss/category/life/", "category": "생활꿀팁", "trust_level": "high" },
|
||||
|
||||
{ "name": "Product Hunt", "url": "https://www.producthunt.com/feed", "category": "앱추천", "trust_level": "medium" },
|
||||
{ "name": "테크크런치 앱", "url": "https://techcrunch.com/category/apps/feed/", "category": "앱추천", "trust_level": "high" },
|
||||
{ "name": "앱스토리", "url": "https://www.appstory.co.kr/rss/rss.xml", "category": "앱추천", "trust_level": "medium" },
|
||||
|
||||
{ "name": "매일경제 IT", "url": "https://rss.mk.co.kr/rss/30000001/", "category": "재테크절약", "trust_level": "high" },
|
||||
{ "name": "머니투데이", "url": "https://rss.mt.co.kr/news/mt_news.xml", "category": "재테크절약", "trust_level": "high" },
|
||||
{ "name": "한국경제 재테크", "url": "https://www.hankyung.com/feed/finance", "category": "재테크절약", "trust_level": "high" },
|
||||
{ "name": "뱅크샐러드 블로그", "url": "https://blog.banksalad.com/rss.xml", "category": "재테크절약", "trust_level": "medium" },
|
||||
{ "name": "서울경제", "url": "https://www.sedaily.com/rss/rss.xml", "category": "재테크절약", "trust_level": "high" },
|
||||
|
||||
{ "name": "연합뉴스 팩트체크", "url": "https://www.yna.co.kr/rss/factcheck.xml", "category": "팩트체크", "trust_level": "high" },
|
||||
{ "name": "SBS 뉴스", "url": "https://news.sbs.co.kr/news/SectionRssFeed.do?sectionId=01&plink=RSSREADER", "category": "팩트체크", "trust_level": "high" },
|
||||
{ "name": "KBS 뉴스", "url": "https://news.kbs.co.kr/rss/rss.xml", "category": "팩트체크", "trust_level": "high" },
|
||||
{ "name": "JTBC 뉴스", "url": "https://fs.jtbc.co.kr/RSS/newsflash.xml", "category": "팩트체크", "trust_level": "high" }
|
||||
],
|
||||
"x_keywords": [
|
||||
"바이브코딩",
|
||||
"vibe coding",
|
||||
"AI 자동화",
|
||||
"Claude 사용",
|
||||
"AI 사용법",
|
||||
"ChatGPT 활용",
|
||||
"비개발자 앱",
|
||||
"노코드 AI"
|
||||
"Claude 사용",
|
||||
"인공지능 추천",
|
||||
"앱 추천",
|
||||
"생활꿀팁",
|
||||
"맛집 추천",
|
||||
"스타트업 소식",
|
||||
"재테크 방법",
|
||||
"쇼핑 추천"
|
||||
],
|
||||
"github_trending": {
|
||||
"url": "https://github.com/trending",
|
||||
|
||||
Reference in New Issue
Block a user