Updating matches
Updating players stats(not finished) Not tested
This commit is contained in:
@@ -4,6 +4,7 @@ import json
|
|||||||
import lewy_globals
|
import lewy_globals
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
|
from sqlalchemy import func
|
||||||
|
|
||||||
def safe_traverse(obj: dict, path: list, default=None):
|
def safe_traverse(obj: dict, path: list, default=None):
|
||||||
result = obj
|
result = obj
|
||||||
@@ -16,6 +17,21 @@ def safe_traverse(obj: dict, path: list, default=None):
|
|||||||
finally:
|
finally:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def get_stat_value(stats: dict, stat_id: str, field: str = "value", default=None):
|
||||||
|
"""
|
||||||
|
Bezpiecznie pobiera wartość z pola 'value' lub 'type' dla danego stat_id w strukturze 'stats'.
|
||||||
|
|
||||||
|
:param stats: słownik ze statystykami
|
||||||
|
:param stat_id: ID statystyki jako string, np. "595"
|
||||||
|
:param field: 'value' lub 'type'
|
||||||
|
:param default: wartość domyślna zwracana, jeśli coś pójdzie nie tak
|
||||||
|
:return: wartość z pola lub default
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return stats[stat_id][field]
|
||||||
|
except (KeyError, TypeError):
|
||||||
|
return default
|
||||||
|
|
||||||
class scraper:
|
class scraper:
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
@@ -97,6 +113,7 @@ class scraper:
|
|||||||
# Jeśli nie, dodaj go w podobny sposób, jak
|
# Jeśli nie, dodaj go w podobny sposób, jak
|
||||||
# w sample_data_init() (w lewy_db.py).
|
# w sample_data_init() (w lewy_db.py).
|
||||||
|
|
||||||
|
|
||||||
page = 0
|
page = 0
|
||||||
match_num = 0
|
match_num = 0
|
||||||
while not stop_scraping:
|
while not stop_scraping:
|
||||||
@@ -141,8 +158,42 @@ class scraper:
|
|||||||
|
|
||||||
# TODO: dodaj obiekt mecz do bazy (simple_insert_one(), simple_insert_many())
|
# TODO: dodaj obiekt mecz do bazy (simple_insert_one(), simple_insert_many())
|
||||||
print(f"{c.OKCYAN}Nowy mecz ({match_num}){c.ENDC}: {match}")
|
print(f"{c.OKCYAN}Nowy mecz ({match_num}){c.ENDC}: {match}")
|
||||||
|
|
||||||
|
self.db.simple_insert_one("mecze",
|
||||||
|
zewnetrzne_id_meczu= safe_traverse(match, ["eventId"], default=""),
|
||||||
|
data= safe_traverse(match, ["eventStartTime"], default=func.now()),
|
||||||
|
gospodarze_id= safe_traverse(match, ["homeParticipant3CharName"], default=0),
|
||||||
|
gospodarze= safe_traverse(match, ["homeParticipantName"], default=""),
|
||||||
|
goscie_id= safe_traverse(match, ["awayParticipant3CharName"], default=0),
|
||||||
|
goscie= safe_traverse(match, ["awayParticipantName"], default=""),
|
||||||
|
gosp_wynik= safe_traverse(match, ["homeScore"], default=0),
|
||||||
|
gosc_wynik= safe_traverse(match, ["awayScore"], default=0),
|
||||||
|
sezon= safe_traverse(match, ["tournamentSeason"], default=""),
|
||||||
|
nazwa_turnieju= safe_traverse(match, ["tournamentTitle"], default=""),
|
||||||
|
skrocona_nazwa_turnieju=safe_traverse(match, ["tournamentTemplateShortCode"], default=""),
|
||||||
|
flaga= safe_traverse(match, ["flagId"], default=0),
|
||||||
|
|
||||||
|
)
|
||||||
match_num += 1
|
match_num += 1
|
||||||
|
|
||||||
|
stats=safe_traverse(match, ["stats"], default=""),
|
||||||
|
|
||||||
|
|
||||||
|
self.db.increment_fields("sportowcy",zewnetrzne_id_sportowca,
|
||||||
|
ostatni_mecz= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
ilosc_wystapien= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
minut_gry= get_stat_value(stats, "595"),
|
||||||
|
gier_sum= 1 if get_stat_value(stats, "595") > 0 else 0 ,
|
||||||
|
goli_sum= get_stat_value(stats, "596"),
|
||||||
|
asyst_sum= get_stat_value(stats, "541"),
|
||||||
|
interwencji_sum= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
nieobronionych_interwencji_sum= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
zoltych_kartek_sum= get_stat_value(stats, "599"),
|
||||||
|
czerwonych_kartek_sum= get_stat_value(stats, "600"),
|
||||||
|
wygranych_sum= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
wynik_sum= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
meczow_do_wynikow_sum= safe_traverse(match, ["eventId"], default=0), #TODO: Zaktualizuj statystyki sportowca
|
||||||
|
)
|
||||||
|
|
||||||
# TODO: Zaktualizuj statystyki sportowca
|
# TODO: Zaktualizuj statystyki sportowca
|
||||||
|
|
||||||
|
|||||||
@@ -307,6 +307,72 @@ class baza():
|
|||||||
return 0
|
return 0
|
||||||
#return 1
|
#return 1
|
||||||
|
|
||||||
|
@exit_gracefully
|
||||||
|
def increment_fields(self, entity_type, record_id, **increments):
|
||||||
|
"""
|
||||||
|
Dodaje wartości do istniejących pól (np. goli_sum += 2).
|
||||||
|
|
||||||
|
Użycie:
|
||||||
|
increment_fields(ldb.statystyki_sportowcow, 123, goli_sum=2, asyst_sum=1)
|
||||||
|
"""
|
||||||
|
if not isinstance(entity_type, str):
|
||||||
|
entity_type = entity_type.__name__
|
||||||
|
|
||||||
|
if entity_type not in self.entities:
|
||||||
|
print(f"Nieznany typ encji: {entity_type}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
model_class = self.entities[entity_type]
|
||||||
|
|
||||||
|
print(f"[{round(time.time())}] INCREMENT")
|
||||||
|
|
||||||
|
record = self.session.get(model_class, record_id)
|
||||||
|
if not record:
|
||||||
|
print(f"Rekord z ID {record_id} nie istnieje w tabeli {entity_type}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
for key, increment_value in increments.items():
|
||||||
|
if hasattr(record, key):
|
||||||
|
current_value = getattr(record, key, 0)
|
||||||
|
setattr(record, key, current_value + increment_value)
|
||||||
|
else:
|
||||||
|
print(f"⚠️ Pole '{key}' nie istnieje w modelu '{entity_type}' – pomijam.")
|
||||||
|
|
||||||
|
self.session.commit()
|
||||||
|
return 0
|
||||||
|
@exit_gracefully
|
||||||
|
def simple_update_one(self, entity_type, record_id, **kwargs):
|
||||||
|
"""
|
||||||
|
Użycie:
|
||||||
|
simple_update_one(ldb.kluby, "polska", pelna_nazwa="Nowa Nazwa", skrocona_nazwa="NN")
|
||||||
|
|
||||||
|
Aktualizuje pojedynczy rekord w bazie danych na podstawie ID.
|
||||||
|
"""
|
||||||
|
if not isinstance(entity_type, str):
|
||||||
|
entity_type = entity_type.__name__
|
||||||
|
|
||||||
|
if entity_type not in self.entities:
|
||||||
|
print(f"Nieznany typ encji: {entity_type}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
model_class = self.entities[entity_type]
|
||||||
|
|
||||||
|
print(f"[{round(time.time())}] UPDATE")
|
||||||
|
|
||||||
|
record = self.session.get(model_class, record_id)
|
||||||
|
if not record:
|
||||||
|
print(f"Rekord z ID {record_id} nie istnieje w tabeli {entity_type}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
for key, value in kwargs.items():
|
||||||
|
if hasattr(record, key):
|
||||||
|
setattr(record, key, value)
|
||||||
|
else:
|
||||||
|
print(f"⚠️ Pole '{key}' nie istnieje w modelu '{entity_type}' – pomijam.")
|
||||||
|
|
||||||
|
self.session.commit()
|
||||||
|
return 0
|
||||||
|
|
||||||
@exit_gracefully
|
@exit_gracefully
|
||||||
def sample_data_init(self, override_safety_check=False):
|
def sample_data_init(self, override_safety_check=False):
|
||||||
"""
|
"""
|
||||||
@@ -388,4 +454,5 @@ class baza():
|
|||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
from git import Repo # hash ostatniego commitu
|
#from git import Repo # hash ostatniego commitu
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import toml
|
import toml
|
||||||
|
|||||||
BIN
FlaskWebProject/instance/lewangoalski.sqlite
Normal file
BIN
FlaskWebProject/instance/lewangoalski.sqlite
Normal file
Binary file not shown.
Reference in New Issue
Block a user