import requests import psycopg2 from psycopg2.extras import execute_values PAGE = 10 url = "https://api.opendota.com/api/proMatches" all_matches = [] less_than_match_id = None # Разрешенные лиги ALLOWED_LEAGUES = [17420] # Замените на нужные ID лиг for page in range(PAGE): params = {} if less_than_match_id: params['less_than_match_id'] = less_than_match_id response = requests.get(url, params=params) if response.status_code == 200: matches = response.json() all_matches.extend(matches) print(f"Страница {page + 1}: получено {len(matches)} матчей") if matches: less_than_match_id = matches[-1]['match_id'] else: print(f"Ошибка на странице {page + 1}: {response.status_code}") break print(f"\nВсего получено {len(all_matches)} матчей") # Подключение к базе данных conn = psycopg2.connect( host="localhost", port=5432, database="korobka_db", user="postgres", password="postgres" ) cursor = conn.cursor() # Подготовка данных для вставки (фильтр по leagueid) data = [ ( match['match_id'], match.get('start_time'), match.get('leagueid'), match.get('radiant_team_id'), match.get('dire_team_id'), match.get('radiant_win'), 'pro' # ← добавили source ) for match in all_matches if match.get('leagueid') in ALLOWED_LEAGUES ] print(f"Отфильтровано {len(data)} матчей из {len(all_matches)} по разрешенным лигам") # Вставка данных в таблицу execute_values( cursor, """INSERT INTO matches (id, start_time, leagueid, radiant_team_id, dire_team_id, radiant_win, source) VALUES %s ON CONFLICT (id) DO UPDATE SET start_time = EXCLUDED.start_time, leagueid = EXCLUDED.leagueid, radiant_team_id = EXCLUDED.radiant_team_id, dire_team_id = EXCLUDED.dire_team_id, radiant_win = EXCLUDED.radiant_win, source = EXCLUDED.source""", data ) conn.commit() cursor.close() conn.close() print(f"Успешно сохранено {len(data)} матчей в БД")