refactoring
This commit is contained in:
29
config/crawler_constants.yaml
Normal file
29
config/crawler_constants.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# crawler_constants.yaml
|
||||
# 네이버 API 크롤러 상수
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# HTTP 요청 헤더
|
||||
headers:
|
||||
User-Agent: "Mozilla/5.0"
|
||||
Accept: "application/json, text/plain, */*"
|
||||
Accept-Language: "ko-KR,ko;q=0.9"
|
||||
Origin: "https://m.sports.naver.com"
|
||||
x-sports-backend: "kotlin"
|
||||
|
||||
# 무시할 textOption type 코드
|
||||
skip_option_types: [0, 8, 98, 99]
|
||||
|
||||
# 무시할 이벤트 텍스트
|
||||
hidden_event_texts:
|
||||
- "투수 투수판 이탈"
|
||||
- "코칭스태프 마운드 방문"
|
||||
- "포수 마운드 방문"
|
||||
|
||||
# 교체 키워드 (텍스트에 이것이 포함되면 교체 이벤트로 판단)
|
||||
change_keywords:
|
||||
- "(으)로 교체"
|
||||
- "수비위치 변경"
|
||||
|
||||
# 최대 이닝 수
|
||||
max_inning: 20
|
||||
39
config/field_coordinates.yaml
Normal file
39
config/field_coordinates.yaml
Normal file
@@ -0,0 +1,39 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# field_coordinates.yaml
|
||||
# 타구 좌표, 타구종류, 파울 좌표
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# 타구 좌표 (zone → x, y 퍼센트)
|
||||
field_coordinates:
|
||||
투수: [50, 80]
|
||||
포수: [50, 93]
|
||||
1루수: [63, 77]
|
||||
2루수: [60, 65]
|
||||
3루수: [37, 77]
|
||||
유격수: [40, 65]
|
||||
좌익수: [22, 42]
|
||||
중견수: [50, 24]
|
||||
우익수: [78, 42]
|
||||
좌전: [30, 50]
|
||||
중전: [50, 35]
|
||||
우전: [70, 50]
|
||||
좌중간: [34, 34]
|
||||
우중간: [66, 34]
|
||||
좌월: [20, 30]
|
||||
중월: [50, 14]
|
||||
우월: [80, 30]
|
||||
|
||||
# 타구 종류 매핑 (라벨 → value)
|
||||
hit_ball_type:
|
||||
땅볼: "0"
|
||||
일반바운드: "1"
|
||||
플라이: "2"
|
||||
라인드라이브: "3"
|
||||
펜스타구: "4"
|
||||
홈런성타구: "5"
|
||||
번트타구: "6"
|
||||
|
||||
# 파울 플라이 기준 좌표
|
||||
foul_fly:
|
||||
left: [2, 70]
|
||||
right: [98, 70]
|
||||
83
config/mappings.yaml
Normal file
83
config/mappings.yaml
Normal file
@@ -0,0 +1,83 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# mappings.yaml
|
||||
# 관리자 사이트 허용값(key) → 매핑되는 네이버/입력 표기(aliases)
|
||||
#
|
||||
# 구조: site_label: [alias_1, alias_2, ...]
|
||||
# 매핑 방향: alias → site_label (역매핑으로 조회)
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# 팀명 (관리자 사이트에서 사용하는 팀 표기)
|
||||
team_name:
|
||||
Hero: [키움, 키움 히어로즈, Hero]
|
||||
# 나머지 팀은 네이버 표기와 사이트 표기가 동일하여 별도 매핑 불필요
|
||||
|
||||
# 팀 코드 → 한글 팀명 (네이버 API gameId 파싱용)
|
||||
team_code:
|
||||
한화: [HH]
|
||||
KIA: [HT]
|
||||
KT: [KT]
|
||||
LG: [LG]
|
||||
롯데: [LT]
|
||||
NC: [NC]
|
||||
두산: [OB]
|
||||
SSG: [SK]
|
||||
삼성: [SS]
|
||||
키움: [WO]
|
||||
|
||||
# 구장명 (관리자 사이트 select 옵션 라벨)
|
||||
stadium_name:
|
||||
고척돔: [고척, 고척스카이돔]
|
||||
잠실: [잠실, 잠실야구장]
|
||||
대구라팍: [대구 삼성 라이온즈 파크, 대구라이온즈파크, 대구 라팍, 대구삼성라이온즈파크]
|
||||
수원: [수원 케이티 위즈 파크, 수원KT위즈파크, 수원kt위즈파크]
|
||||
창원: [창원NC파크, 창원 nc 파크, 창원 NC 파크]
|
||||
대전: [대전 한화생명 볼파크, 대전한화생명볼파크]
|
||||
"한밭(~2024)": [대전 한화생명 이글스파크, 대전한화생명이글스파크]
|
||||
문학: [인천, 인천 SSG 랜더스필드, 인천SSG랜더스필드, 문학]
|
||||
광주: [광주-기아 챔피언스 필드, 광주 기아 챔피언스 필드, 광주KIA챔피언스필드, 광주 kia 챔피언스 필드]
|
||||
사직: [사직야구장, 사직]
|
||||
울산: [울산문수야구장, 울산 문수야구장, 울산]
|
||||
포항: [포항야구장, 포항]
|
||||
마산: [마산야구장, 마산]
|
||||
군산: [군산월명야구장, 군산]
|
||||
청주: [청주야구장, 청주]
|
||||
목동: [목동야구장, 목동]
|
||||
무등: [무등야구장, 무등]
|
||||
대구: [대구시민야구장, 대구]
|
||||
|
||||
# 경기 유형 (관리자 사이트 select 옵션)
|
||||
game_type:
|
||||
정규경기: [kbo_r]
|
||||
와일드카드: [wildcard, wc]
|
||||
와일드카드 결정전: [와일드카드]
|
||||
준플레이오프: [semi_playoff, semi_po]
|
||||
플레이오프: [playoff, po]
|
||||
한국시리즈: [korean_series, ks]
|
||||
|
||||
# 포지션 번호 (관리자 사이트 defense_no)
|
||||
position_number:
|
||||
"1": [투수]
|
||||
"2": [포수]
|
||||
"3": [1루수]
|
||||
"4": [2루수]
|
||||
"5": [3루수]
|
||||
"6": [유격수]
|
||||
"7": [좌익수]
|
||||
"8": [중견수]
|
||||
"9": [우익수]
|
||||
"10": [지명타자]
|
||||
|
||||
# KBO 시즌 ID 후보 (경기 타입별)
|
||||
kbo_sr_id_candidates:
|
||||
정규경기: ["0", "1", "2", "3", "4", "5", "7", "8", "9"]
|
||||
와일드카드: ["3", "0", "1", "2", "4", "5", "7", "8", "9"]
|
||||
준플레이오프: ["4", "0", "1", "2", "3", "5", "7", "8", "9"]
|
||||
플레이오프: ["5", "0", "1", "2", "3", "4", "7", "8", "9"]
|
||||
한국시리즈: ["7", "0", "1", "2", "3", "4", "5", "8", "9"]
|
||||
|
||||
# 투수 결과 라벨
|
||||
result_labels:
|
||||
승리투수: [W]
|
||||
패전투수: [L]
|
||||
홀드: [H]
|
||||
세이브: [S]
|
||||
76
config/pitch_rules.yaml
Normal file
76
config/pitch_rules.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# pitch_rules.yaml
|
||||
# 관리자 사이트 허용값(key) → 매핑되는 네이버 표기(aliases)
|
||||
#
|
||||
# 구조: site_label: [naver_alias_1, naver_alias_2, ...]
|
||||
# 매핑 방향: 네이버 alias → site_label (역매핑으로 조회)
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# 구종 (관리자 사이트 evt_ballType 옵션)
|
||||
pitch_type:
|
||||
패스트볼: [직구, 패스트볼]
|
||||
커브: [커브]
|
||||
체인지업: [체인지업]
|
||||
슬라이더: [슬라이더]
|
||||
커터: [커터]
|
||||
스플리터: [스플리터]
|
||||
너클: [너클]
|
||||
폭투: [폭투]
|
||||
투심: [투심]
|
||||
싱커: [싱커]
|
||||
포크볼: [포크, 포크볼]
|
||||
기타: [] # 매핑되지 않는 구종의 폴백
|
||||
|
||||
# 투구 결과 (관리자 사이트 evt_batter 투구결과 영역)
|
||||
pitch_result:
|
||||
볼: [볼]
|
||||
"스트라이크(루킹)": [스트라이크]
|
||||
"헛스윙(스트라이크)": [헛스윙]
|
||||
번트시도-스트라이크: [헛스윙 번트, 번트 헛스윙, 번트헛스윙]
|
||||
파울: [파울]
|
||||
번트-파울: [번트파울]
|
||||
몸에 맞는 볼: [몸에 맞는 볼, 몸에 맞는 공, 사구]
|
||||
고의사구: [고의사구, 자동 고의사구]
|
||||
폭투-볼: [폭투-볼]
|
||||
포일-볼: [포일-볼]
|
||||
보크: [보크]
|
||||
보크-볼: [보크-볼]
|
||||
노카운트: [노카운트]
|
||||
|
||||
# 타자 결과 (관리자 사이트 evt_batter 타자결과 영역)
|
||||
batter_result:
|
||||
# ── 세이프 ──
|
||||
1루타: [single]
|
||||
2루타: [double]
|
||||
3루타: [triple]
|
||||
홈런: [home_run]
|
||||
포볼: [walk]
|
||||
고의사구: [intentional_walk]
|
||||
몸에 맞는 볼: [hit_by_pitch]
|
||||
번트안타: [bunt_hit]
|
||||
수비실책: [reach_on_error]
|
||||
야수선택: [reach_on_fielder_choice]
|
||||
"땅볼출루(무안타)": [reach_on_grounder]
|
||||
"1루타 후 주루아웃": [single_runner_out]
|
||||
"2루타 후 주루아웃": [double_runner_out]
|
||||
"3루타 후 주루아웃": [triple_runner_out]
|
||||
"1루타 후 수비실책진루": [single_error_advance]
|
||||
"2루타 후 수비실책진루": [double_error_advance]
|
||||
"3루타 후 수비실책진루": [triple_error_advance]
|
||||
# ── 아웃 ──
|
||||
"루킹스트라이크-아웃": [strikeout]
|
||||
번트-삼진: [bunt_strikeout]
|
||||
아웃: [out]
|
||||
희생 플라이: [sacrifice_fly]
|
||||
희생 번트: [sacrifice_bunt]
|
||||
|
||||
# 주루 이벤트 (관리자 사이트 evt_runner_N)
|
||||
runner_event:
|
||||
일반 진루: [advance, score]
|
||||
도루성공: [steal]
|
||||
도루시도 아웃: [steal_fail]
|
||||
포스아웃: [force_out]
|
||||
견제 아웃: [pickoff_out]
|
||||
수비 실책: [error_advance]
|
||||
폭투-진루성공: [wild_pitch_advance]
|
||||
포일-진루성공: [passed_ball_advance]
|
||||
32
config/review_rules.yaml
Normal file
32
config/review_rules.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# review_rules.yaml
|
||||
# 합의판정 항목 → 결과 그룹 매핑
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# 합의판정 항목별 결과 그룹 (game_report.py + record_game_playwright.py 통합)
|
||||
# type1 = 페어/파울, type2 = 아웃/세이프, type3 = 인정/불인정
|
||||
review_result_groups:
|
||||
홈런타구 페어 파울:
|
||||
type: type1
|
||||
options: [페어, 파울]
|
||||
외야타구 페어 파울:
|
||||
type: type1
|
||||
options: [페어, 파울]
|
||||
포수/태그플레이 아웃/세이프:
|
||||
type: type2
|
||||
options: [아웃, 세이프]
|
||||
야수의 포구:
|
||||
type: type2
|
||||
options: [아웃, 세이프]
|
||||
몸에 맞는 공:
|
||||
type: type3
|
||||
options: [인정, 불인정]
|
||||
파울:
|
||||
type: type3
|
||||
options: [인정, 불인정]
|
||||
헛스윙:
|
||||
type: type3
|
||||
options: [인정, 불인정]
|
||||
기타:
|
||||
type: type3
|
||||
options: [인정, 불인정]
|
||||
29
config/site_selectors.yaml
Normal file
29
config/site_selectors.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
# ─────────────────────────────────────────────────
|
||||
# site_selectors.yaml
|
||||
# 관리자 사이트 CSS 셀렉터 및 수비 버튼 매핑
|
||||
# ─────────────────────────────────────────────────
|
||||
|
||||
# 수비 버튼 CSS 셀렉터 (포지션 → selector)
|
||||
defense_button_id:
|
||||
투수: "input[name='defenseNumberBtn']#picher"
|
||||
포수: "input[name='defenseNumberBtn']#catcher"
|
||||
1루수: "input[name='defenseNumberBtn']#runner_1"
|
||||
2루수: "input[name='defenseNumberBtn']#runner_2"
|
||||
3루수: "input[name='defenseNumberBtn']#runner_3"
|
||||
유격수: "input[name='defenseNumberBtn']#shortStop"
|
||||
중견수: "input[name='defenseNumberBtn']#centerFielder"
|
||||
우익수: "input[name='defenseNumberBtn']#rightFielder"
|
||||
좌익수: "input[name='defenseNumberBtn']#leftFielder"
|
||||
|
||||
# 포지션 → 수비번호 (사이트 defense_no select 옵션 value)
|
||||
position_to_defense_no:
|
||||
투수: "1"
|
||||
포수: "2"
|
||||
1루수: "3"
|
||||
2루수: "4"
|
||||
3루수: "5"
|
||||
유격수: "6"
|
||||
좌익수: "7"
|
||||
중견수: "8"
|
||||
우익수: "9"
|
||||
지명타자: "10"
|
||||
Reference in New Issue
Block a user