diff --git a/docs/news_source_candidates.md b/docs/news_source_candidates.md new file mode 100644 index 0000000..f55ac5c --- /dev/null +++ b/docs/news_source_candidates.md @@ -0,0 +1,55 @@ +# News Source 후보 명단 (PR-News-Prep-Layer-1) + +본 명단은 추천일 뿐 자동 INSERT 안 함. 사용자가 RSS feed 안정성 / 정치성·품질 / 중복도 확인 후 직접 `news_sources` 테이블에 INSERT 결정. + +작성: 2026-05-15. 약한 국가 (TW 1, HK 1, IN 1, CN 활성 2) 보강 우선. + +## 자동 검증 (HEAD 요청, 2026-05-15) + +| 국가 | 후보 | feed_url | language | category | HEAD 결과 | 비고 | +|---|---|---|---|---|---|---| +| HK | Hong Kong Free Press | `https://hongkongfp.com/feed/` | en | News | ✅ 200 (nginx) | 영문 독립 매체 | +| IN | The Hindu | `https://www.thehindu.com/news/feeder/default.rss` | en | News | ✅ 200 (application/xml) | 영문 메이저 | +| IN | Times of India - World | `https://timesofindia.indiatimes.com/rssfeeds/296589292.cms` | en | World | ✅ 200 (text/xml) | 영문 메이저 | +| CN | Caixin Global (english.caixin.com) | `https://english.caixin.com/feed/rss` | en | Economy | ✅ 200 (after 301 ×2) | 경제 중심, 검열 상대적 적음. www.caixinglobal.com 도메인은 404 | +| TW | RTHK English ※ HK 임 정정 | `https://www.rthk.hk/rthk/news/rss/e_expressnews_elocal.xml` | en | News | ⚠️ 301 (redirect) | Location 따라간 후 enable 결정. HK 공영방송 | +| TW | Focus Taiwan | `https://focustaiwan.tw/rss/aALL` | en | News | ❌ 404 | URL 갱신 필요 (사이트 RSS index 확인) | +| TW | 自由時報 | `https://news.ltn.com.tw/rss/all.xml` | zh | News | ❌ 403 (bot 차단) | UA 헤더 필요 또는 다른 RSS path | +| IN | Scroll.in | `https://scroll.in/feed.xml` 또는 `/feeds/all.rss` | en | News | ❌ 404 | URL 갱신 필요 (사이트 RSS index 확인) | + +## 권장 우선순위 (즉시 enable 가능) + +사용자가 (a) RSS 1회 fetch entries > 0 (b) 정치성/품질 (c) 중복도 판단 후: + +1. **Hong Kong Free Press** (HK 보강, 현재 1→2) +2. **The Hindu** (IN 보강, 현재 1→2) +3. **Times of India World** (IN 보강, 현재 1→2 또는 3) +4. **Caixin English** (CN 활성 2→3, 경제 중심 다양화) + +위 4건 추가 시 — HK 2 / IN 3 / CN 활성 3 = 약한 국가 보강 완료. + +## URL 갱신 필요 (별도 사용자 작업) + +- Focus Taiwan / 自由時報 / Scroll.in / RTHK English — 각 사이트 RSS index 페이지 방문하여 최신 feed URL 확인 후 후보 갱신. + +## INSERT 예시 (사용자가 enable 결정 후) + +```sql +-- 예시: Caixin English 추가 (사용자 SQL, 본 PR 에는 미포함) +INSERT INTO news_sources (name, country, feed_url, feed_type, category, language, enabled) +VALUES + ('Caixin English Economy', 'CN', 'https://english.caixin.com/feed/rss', 'rss', 'Economy', 'en', true), + ('Hong Kong Free Press', 'HK', 'https://hongkongfp.com/feed/', 'rss', 'News', 'en', true), + ('The Hindu', 'IN', 'https://www.thehindu.com/news/feeder/default.rss', 'rss', 'News', 'en', true), + ('Times of India World', 'IN', 'https://timesofindia.indiatimes.com/rssfeeds/296589292.cms', 'rss', 'World', 'en', true); +``` + +INSERT 후 `news_collector` 다음 fire (6h interval) 시 자동 수집 시작 + `feedparser bozo=0` 검증 + 1주 안정성 (`last_fetched_at` 정상 갱신) 관찰. + +## 검토하지 않는 국가 + +KR/US/JP/FR/DE 는 이미 활성 4~8 소스로 충분. 본 라운드 추가 권장 X. 추가 시 카테고리 다양성 (경제/기술/문화) 우선. + +## 죽은 source (별도 D26 Drift Log) + +- `新华网 Culture / Sci-Tech / World` (id=11/12/19): 2026-04-13 이후 `last_fetched_at` 미갱신. 이미 `enabled=false`. 부활 보류 (CN RSS 검열/접속 안정성). 삭제 X, 향후 endpoint 변경 발견 시 enable 토글.