80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
|
|
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)} матчей в БД")
|