# 야구(KBO/MLB) 데이터 소스 카탈로그 (실검증: 2026-07-21) ## 소스 총평 | 소스 | 상태 | 요약 | |---|---|---| | **네이버 스포츠 API** (비공식) | ✅ KBO 주력 | 일정·결과·순위·프리뷰·박스스코어·문자중계(투구 단위)까지 전부. 키 불필요, UA 헤더만 | | **MLB 공식 Stats API** | ✅ MLB 주력 | statsapi.mlb.com — 키 불필요·공식. 일정·결과·순위·예고선발·투구 단위 라이브 피드 | | TheSportsDB | ⚠️ 유료 전용 | 무료 키 `123`은 next/past 조회당 1경기만(전 리그 공통). 유료 ~$10/월 | | API-Sports 야구 | ❌ 미사용 | KBO=league 5 존재하나 무료는 2022~24 시즌만 | ## 네이버 (api-gw.sports.naver.com) — KBO - 인증 없음, User-Agent 필수. gameId = `{yyyymmdd}{원정}{홈}0{연도}` - 팀코드: HT(KIA) LG OB(두산) SS(삼성) LT(롯데) SK(SSG) KT NC WO(키움) HH(한화) - `GET /schedule/games?...&categoryId=kbo&fromDate=&toDate=` — 일정·스코어·statusInfo("N회초/말")·cancel·suspended - `GET /schedule/games/{id}/preview` — 예고 선발투수(구종·상대전적)·핫콜드존·시즌 상대전적·순위 - `GET /schedule/games/{id}/record` — R/H/E/B·이닝별·타자/투수 박스스코어·교체·홈런일지 - `GET /schedule/games/{id}/relay?inning=N` — currentGameState(투수/타자/볼카운트/주자)·라인업(seqno=교체)·투구단위 텍스트 - `GET /stats/categories/kbo/seasons/{year}/teams` — 순위·승률·최근5·팀 공격/수비 풀스탯 - 리스크: 비공식(약관·차단). 로컬/데모용 — 상용 전환 시 정식 소스 교체 ## MLB 공식 (statsapi.mlb.com) — MLB - `GET /api/v1/schedule?sportId=1&startDate=&endDate=` (+`&hydrate=probablePitcher`) - `GET /api/v1/standings?leagueId=103|104&season=` — AL/NL 지구 순위 - `GET /api/v1.1/game/{gamePk}/feed/live` — linescore(B/S/O·주자)·offense(batter/onDeck/inHole/pitcher)·boxscore(타순·포지션)·plays(투구 단위) - 팀 로고: `https://www.mlbstatic.com/team-logos/{teamId}.svg` (공식 CDN) - 한글 팀명은 자체 매핑(`teams_baseball.py`), 선수명은 영문 ## 구현 위치 (backend/app) - `teams_baseball.py` — KBO 10 + MLB 30 (한글·statsapi id·로고) - `services/baseball_fetch.py` — 일정·결과 수집 (리그별 어댑터) - `services/baseball_sync.py` — (리그, KST날짜, 팀쌍) 키 동기화 · 우천취소 제거 - `services/baseball_details.py` — 프리뷰·순위 캐시(DataCache) + 라이브 필드 뷰 프록시(15s TTL) - `services/baseball_data.py` — AI 프롬프트 데이터 블록 (자체 DB 폼 + 캐시) - 호출량: 동기화 하루 2회 + 정산 5분 폴링 + 라이브는 경기당 최대 4콜/분(캐시 상한)