o2o-triple-pick/docs/DATA_SOURCES.md
jwkim 4e1ebc8989 feat: KBO/MLB 운영 안정화 — 순위 탭·라이브 개선·취소/더블헤더 지원·야구 점수제
AI 예측
- 생성 시점을 킥오프 22시간 전으로 변경(선발투수 예고 이후), 잡 매시간 실행
- 경기 시작 후 생성 금지(사후 예측 방지), 경기 단위 커밋으로 중단 시 진행분 보존

일정·라이브 UI
- 야구 일정에 순위 탭 추가 (KBO 단일 순위표 · MLB 6개 디비전, /api/standings 신설)
- 경기중 카드에 현재 이닝·실시간 스코어 표시 (30s 폴링, 서버 15s 캐시)
- MLB 선발 누락 수정: statsapi 날짜 파라미터 미국 날짜 기준 보정(-1일)
- 라이브 대기타석 스크롤바 다크 테마 처리

운영 견고성
- 우천취소: 경기 삭제 → cancelled 상태 보존 (투표·예측 기록 유지, 정산/투표/AI 제외)
- 더블헤더: 시작시각순 seq로 1·2차전 분리 등록 (match_id _2, 정산·라이브·프리뷰 매핑)
- 축구 데이터 수집을 wc 리그로 한정 (야구 팀을 축구 API에 검색하던 쿼터 낭비 수정)

점수제
- 야구 판정 완화: 근접=득실차 ±1, 부분=한 팀 득점 ±1 (등급·배점은 리그 공통 유지)
- 채점 판정을 _grade_of() 단일 함수로 통합, 종료된 야구 경기 재채점
- 배점 안내 모달 야구 문구 분리, docs/SCORING.md 갱신

기타
- 야구 전용 댓글 닉네임 풀 (종목별 세션 캐시 분리)
- 리더보드 리그별 조회 연동 (?league=)
2026-07-22 11:01:10 +09:00

2.7 KiB

야구(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콜/분(캐시 상한)