22.10.205

This commit is contained in:
2025-10-22 09:47:44 +00:00
parent 8ea87b371a
commit 982655faa1
2 changed files with 37 additions and 34 deletions

View File

@@ -71,7 +71,7 @@ LOG_CONFIG = {
}, },
"console": { "console": {
"class": "logging.StreamHandler", "class": "logging.StreamHandler",
"level": "DEBUG", "level": "WARNING",
"formatter": "simple", "formatter": "simple",
"stream": "ext://sys.stdout", "stream": "ext://sys.stdout",
}, },
@@ -238,7 +238,7 @@ def rewrite_file(filename: str, data: dict, directory: str = "JSON") -> None:
try: try:
with open(filepath, "w", encoding="utf-8") as f: with open(filepath, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2) json.dump(data, f, ensure_ascii=False, indent=2)
logger.debug(f"Файл {filepath} перезаписан.") logger.info(f"Файл {filepath} перезаписан.")
except Exception as e: except Exception as e:
logger.error(f"Ошибка при записи файла {filepath}: {e}") logger.error(f"Ошибка при записи файла {filepath}: {e}")
@@ -256,7 +256,7 @@ def get_json(url: str, timeout: int = 10, verify_ssl: bool = True) -> dict | Non
dict | None: Распарсенный JSON или None при ошибке. dict | None: Распарсенный JSON или None при ошибке.
""" """
try: try:
logger.debug(f"Пытаюсь получить данные с {url}") logger.info(f"Пытаюсь получить данные с {url}")
response = requests.get(url, timeout=timeout, verify=verify_ssl) response = requests.get(url, timeout=timeout, verify=verify_ssl)
response.raise_for_status() # выбросит исключение, если статус != 2xx response.raise_for_status() # выбросит исключение, если статус != 2xx
return response.json() return response.json()
@@ -292,7 +292,7 @@ def Game_Online2(game_id: int) -> dict | None:
# Получаем данные старого матча # Получаем данные старого матча
game = get_json(build_url("game")) game = get_json(build_url("game"))
if game: if game:
logger.debug("У нас получилось получить данные со старого матча") logger.info("У нас получилось получить данные со старого матча")
else: else:
logger.warning( logger.warning(
f"Не удалось получить данные старого матча: game_id={game_id}" f"Не удалось получить данные старого матча: game_id={game_id}"
@@ -330,7 +330,7 @@ def Game_Online2(game_id: int) -> dict | None:
game["result"]["scoreByPeriods"] = box_score["result"].get("scoreByPeriods", []) game["result"]["scoreByPeriods"] = box_score["result"].get("scoreByPeriods", [])
game["result"]["fullScore"] = box_score["result"].get("fullScore", {}) game["result"]["fullScore"] = box_score["result"].get("fullScore", {})
logger.debug("Склеил данные по онлайн матчу") logger.info("Склеил данные по онлайн матчу")
return game return game
except Exception as e: except Exception as e:
@@ -385,7 +385,7 @@ def Game_Online(game_id: int) -> dict | None:
game = get_json(build_url("game")) game = get_json(build_url("game"))
if game: if game:
logger.debug("У нас получилось получить данные со старого матча") logger.info("У нас получилось получить данные со старого матча")
# Только если матч не в онлайн-режиме — кладём в кэш как 'old' # Только если матч не в онлайн-режиме — кладём в кэш как 'old'
if not is_online: if not is_online:
with _GAME_CACHE_LOCK: with _GAME_CACHE_LOCK:
@@ -456,7 +456,7 @@ def Game_Online(game_id: int) -> dict | None:
game["result"]["scoreByPeriods"] = box_score["result"].get("scoreByPeriods", []) game["result"]["scoreByPeriods"] = box_score["result"].get("scoreByPeriods", [])
game["result"]["fullScore"] = box_score["result"].get("fullScore", {}) game["result"]["fullScore"] = box_score["result"].get("fullScore", {})
logger.debug("Склеил данные по онлайн матчу") logger.info("Склеил данные по онлайн матчу")
# Обновляем кэш и снимаем режим 'old' # Обновляем кэш и снимаем режим 'old'
with _GAME_CACHE_LOCK: with _GAME_CACHE_LOCK:
@@ -1492,17 +1492,17 @@ def Player_Stat_Season(player_id: str, season: str) -> dict:
player_stat_season = get_json(url) player_stat_season = get_json(url)
if not player_stat_season: if not player_stat_season:
logger.debug(f"Пустой ответ от API для игрока {player_id} за сезон {season}") logger.error(f"Пустой ответ от API для игрока {player_id} за сезон {season}")
return {player_id: default_player_stats_season()} return {player_id: default_player_stats_season()}
items = player_stat_season.get("items") items = player_stat_season.get("items")
if items: if items:
logger.debug( logger.info(
f"Данные за сезон {season} для игрока {player_id} успешно получены." f"Данные за сезон {season} для игрока {player_id} успешно получены."
) )
return {player_id: items[-2:]} # последние две записи: Sum и Avg return {player_id: items[-2:]} # последние две записи: Sum и Avg
logger.debug( logger.warning(
f"Нет данных на игрока {player_id} за сезон {season}. Вероятно, еще не играл." f"Нет данных на игрока {player_id} за сезон {season}. Вероятно, еще не играл."
) )
return {player_id: default_player_stats_season()} return {player_id: default_player_stats_season()}
@@ -1513,7 +1513,7 @@ def Player_all_game_in_season2(player_id: str, season:str) -> dict:
player_games = get_json(url) player_games = get_json(url)
# games = {} # games = {}
if not player_games: if not player_games:
logger.debug(f"Пустой ответ от API для игрока {player_id}") logger.error(f"Пустой ответ от API для игрока {player_id}")
return {player_id: default_player_stats_season()} return {player_id: default_player_stats_season()}
for i in player_games.get("items"): for i in player_games.get("items"):
@@ -1526,7 +1526,7 @@ def Player_all_game2(player_id: str) -> dict:
player_seasons = get_json(url) player_seasons = get_json(url)
if not player_seasons: if not player_seasons:
logger.debug(f"Пустой ответ от API для игрока {player_id}") logger.error(f"Пустой ответ от API для игрока {player_id}")
return {player_id: default_player_stats_season()} return {player_id: default_player_stats_season()}
seasons = player_seasons.get("result").get("seasons") seasons = player_seasons.get("result").get("seasons")
@@ -1549,7 +1549,7 @@ def Player_all_game_in_season(player_id: str, season: str) -> List[Dict[str, Any
url = f"{URL}api/abc/players/stats?tag={LEAGUE}&season={season}&id={player_id}" url = f"{URL}api/abc/players/stats?tag={LEAGUE}&season={season}&id={player_id}"
player_games = get_json(url) player_games = get_json(url)
if not player_games: if not player_games:
logger.debug(f"Пустой ответ от API для игрока {player_id}, сезон {season}") logger.error(f"Пустой ответ от API для игрока {player_id}, сезон {season}")
return [ return [
] # возвращаем пустой список, чтобы тип был стабилен ] # возвращаем пустой список, чтобы тип был стабилен
@@ -1595,7 +1595,7 @@ def Player_all_game(player_id: str) -> List[Dict[str, Any]]:
{"id": 2010}, {"id": 2010},
] ]
if not isinstance(seasons, list) or not seasons: if not isinstance(seasons, list) or not seasons:
logger.debug(f"Нет сезонов для игрока {player_id}") logger.error(f"Нет сезонов для игрока {player_id}")
return [] return []
all_games: List[Dict[str, Any]] = [] all_games: List[Dict[str, Any]] = []
@@ -1700,15 +1700,15 @@ def Player_Stat_Career(player_id: str) -> dict:
player_stat_career = get_json(url) player_stat_career = get_json(url)
if not player_stat_career: if not player_stat_career:
logger.debug(f"Пустой ответ от API для игрока {player_id}") logger.error(f"Пустой ответ от API для игрока {player_id}")
return {player_id: default_player_stats()} return {player_id: default_player_stats()}
items = player_stat_career.get("items") items = player_stat_career.get("items")
if items: if items:
logger.debug(f"Данные за карьеру игрока {player_id} успешно получены.") logger.info(f"Данные за карьеру игрока {player_id} успешно получены.")
return {player_id: items[-2:]} # последние два сезона (Sum и Avg) return {player_id: items[-2:]} # последние два сезона (Sum и Avg)
logger.debug(f"Данные на игрока {player_id} не найдены. Вероятно, новичок.") logger.warning(f"Данные на игрока {player_id} не найдены. Вероятно, новичок.")
return {player_id: default_player_stats()} return {player_id: default_player_stats()}
@@ -1717,15 +1717,15 @@ def Coach_Stat(coach_id: str, season: str, team_id: str) -> dict | None:
coach_stat = get_json(url) coach_stat = get_json(url)
if not coach_stat: if not coach_stat:
logger.debug(f"Пустой ответ от API для тренера {coach_id}") logger.error(f"Пустой ответ от API для тренера {coach_id}")
return None return None
items = coach_stat.get("items") items = coach_stat.get("items")
if items: if items:
logger.debug(f"Данные за карьеру тренера {coach_id} успешно получены.") logger.info(f"Данные за карьеру тренера {coach_id} успешно получены.")
return {coach_id: items} return {coach_id: items}
logger.debug(f"Данные для тренера {coach_id} не найдены. Возможно, он новичок.") logger.warning(f"Данные для тренера {coach_id} не найдены. Возможно, он новичок.")
return None return None
@@ -1991,7 +1991,7 @@ def Team_Both_Stat(stop_event: threading.Event) -> None:
) )
if not team_1.get("total") or not team_2.get("total"): if not team_1.get("total") or not team_2.get("total"):
logger.debug("Нет total у команд — пропускаю перезапись team_stats.json") logger.warning("Нет total у команд — пропускаю перезапись team_stats.json")
stop_event.wait(TIMEOUT_ONLINE) stop_event.wait(TIMEOUT_ONLINE)
continue continue
@@ -2051,7 +2051,7 @@ def Team_Both_Stat(stop_event: threading.Event) -> None:
) )
rewrite_file("team_stats", result_json) rewrite_file("team_stats", result_json)
logger.debug("Успешно записаны данные в team_stats.json") logger.info("Успешно записаны данные в team_stats.json")
except Exception as e: except Exception as e:
logger.error( logger.error(
@@ -2127,7 +2127,7 @@ def Referee(stop_event: threading.Event) -> None:
) )
rewrite_file("referee", referees) rewrite_file("referee", referees)
logger.debug("Успешно записаны судьи в файл") logger.info("Успешно записаны судьи в файл")
except Exception as e: except Exception as e:
logger.error(f"Ошибка в Referee потоке: {e}", exc_info=True) logger.error(f"Ошибка в Referee потоке: {e}", exc_info=True)
@@ -2168,7 +2168,7 @@ def Scores_Quarter(stop_event: threading.Event) -> None:
if len(parts) == 2: if len(parts) == 2:
score_by_quarter[i]["score1"] = parts[0] score_by_quarter[i]["score1"] = parts[0]
score_by_quarter[i]["score2"] = parts[1] score_by_quarter[i]["score2"] = parts[1]
logger.debug("Счёт по четвертям получен из fullScore.") logger.info("Счёт по четвертям получен из fullScore.")
# Если нет fullScore, пробуем scoreByPeriods # Если нет fullScore, пробуем scoreByPeriods
elif "scoreByPeriods" in game_data.get("result", {}): elif "scoreByPeriods" in game_data.get("result", {}):
@@ -2176,10 +2176,10 @@ def Scores_Quarter(stop_event: threading.Event) -> None:
for i, score in enumerate(periods[: len(score_by_quarter)]): for i, score in enumerate(periods[: len(score_by_quarter)]):
score_by_quarter[i]["score1"] = str(score.get("score1", "")) score_by_quarter[i]["score1"] = str(score.get("score1", ""))
score_by_quarter[i]["score2"] = str(score.get("score2", "")) score_by_quarter[i]["score2"] = str(score.get("score2", ""))
logger.debug("Счёт по четвертям получен из scoreByPeriods.") logger.info("Счёт по четвертям получен из scoreByPeriods.")
else: else:
logger.debug("Нет данных по счёту, сохраняем пустые значения.") logger.warning("Нет данных по счёту, сохраняем пустые значения.")
rewrite_file("scores", score_by_quarter) rewrite_file("scores", score_by_quarter)
@@ -2235,7 +2235,7 @@ def Status_Online(data: dict, stop_event: threading.Event) -> None:
with game_status_lock: with game_status_lock:
game_status_data = result game_status_data = result
rewrite_file("live_status", [game_status_data]) rewrite_file("live_status", [game_status_data])
logger.debug("Успешно записан онлайн-статус в файл.") logger.info("Успешно записан онлайн-статус в файл.")
else: else:
logger.warning("status_online_func вернула None — пропуск записи.") logger.warning("status_online_func вернула None — пропуск записи.")
except Exception as e: except Exception as e:
@@ -2257,7 +2257,7 @@ def Play_By_Play(data: dict, stop_event: threading.Event) -> None:
game_data = game_online_data game_data = game_online_data
if not game_data: if not game_data:
logger.debug("game_online_data отсутствует") logger.error("game_online_data отсутствует")
stop_event.wait(TIMEOUT_DATA_OFF) stop_event.wait(TIMEOUT_DATA_OFF)
continue continue
@@ -2285,7 +2285,7 @@ def Play_By_Play(data: dict, stop_event: threading.Event) -> None:
plays = game_data.get("result", {}).get("plays", []) plays = game_data.get("result", {}).get("plays", [])
if not plays: if not plays:
logger.debug("нет данных в play-by-play") logger.warning("нет данных в play-by-play")
stop_event.wait(TIMEOUT_DATA_OFF) stop_event.wait(TIMEOUT_DATA_OFF)
continue continue
@@ -2310,7 +2310,7 @@ def Play_By_Play(data: dict, stop_event: threading.Event) -> None:
df_goals = df[df["play"].isin([1, 2, 3])].copy() df_goals = df[df["play"].isin([1, 2, 3])].copy()
if df_goals.empty: if df_goals.empty:
logger.debug("нет данных о голах в play-by-play") logger.warning("нет данных о голах в play-by-play")
stop_event.wait(TIMEOUT_DATA_OFF) stop_event.wait(TIMEOUT_DATA_OFF)
continue continue
@@ -2415,7 +2415,7 @@ def Play_By_Play(data: dict, stop_event: threading.Event) -> None:
filepath = os.path.join(directory, f"{host_prefix}play_by_play.json") filepath = os.path.join(directory, f"{host_prefix}play_by_play.json")
df_goals.to_json(filepath, orient="records", force_ascii=False, indent=4) df_goals.to_json(filepath, orient="records", force_ascii=False, indent=4)
logger.debug("Успешно положил данные об play-by-play в файл") logger.info("Успешно положил данные об play-by-play в файл")
except Exception as e: except Exception as e:
logger.error(f"Ошибка в Play_By_Play: {e}", exc_info=True) logger.error(f"Ошибка в Play_By_Play: {e}", exc_info=True)
@@ -2581,7 +2581,7 @@ def Standing_func(data: dict, stop_event: threading.Event) -> None:
force_ascii=False, force_ascii=False,
indent=4, indent=4,
) )
logger.debug("Standings data saved successfully.") logger.info("Standings data saved successfully.")
elif "playoffPairs" in item and item["playoffPairs"] != []: elif "playoffPairs" in item and item["playoffPairs"] != []:
standings_temp = item["playoffPairs"] standings_temp = item["playoffPairs"]
df = pd.json_normalize(standings_temp) df = pd.json_normalize(standings_temp)
@@ -2598,7 +2598,7 @@ def Standing_func(data: dict, stop_event: threading.Event) -> None:
force_ascii=False, force_ascii=False,
indent=4, indent=4,
) )
logger.debug("Standings data saved successfully.") logger.info("Standings data saved successfully.")
except Exception as e: except Exception as e:
logger.warning(f"Ошибка в турнирном положении: {e}") logger.warning(f"Ошибка в турнирном положении: {e}")

View File

@@ -303,7 +303,10 @@ def load_data_from_json(filepath):
directory = FOLDER_JSON directory = FOLDER_JSON
os.makedirs(directory, exist_ok=True) os.makedirs(directory, exist_ok=True)
filepath_full = os.path.join(directory, f"{filepath}.json") filepath_full = os.path.join(directory, f"{filepath}.json")
print(filepath_full)
# print(filepath)
# print(filepath_full)
# вычисление ключа # вычисление ключа
# ip = get_ip_address() # ip = get_ip_address()
# host = ip_check.get(ip, {}).get("host") or "" # host = ip_check.get(ip, {}).get("host") or ""