From d30480500685104504d06301db3f0b98b5ffeb7a Mon Sep 17 00:00:00 2001 From: kubab Date: Tue, 3 Jun 2025 19:10:59 +0200 Subject: [PATCH] Propozycje wykonania sekcji todo --- FlaskWebProject/FlaskWebProject/fs_scraper.py | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/FlaskWebProject/FlaskWebProject/fs_scraper.py b/FlaskWebProject/FlaskWebProject/fs_scraper.py index 1e93c82..783aaca 100644 --- a/FlaskWebProject/FlaskWebProject/fs_scraper.py +++ b/FlaskWebProject/FlaskWebProject/fs_scraper.py @@ -66,8 +66,13 @@ class scraper: matches_to_add = [] # TODO: Sprawdź, czy sportowiec istnieje w bazie. - # Jeśli nie, dodaj go w podobny sposób, jak - # w sample_data_init() (w lewy_db.py). + if not self.__czy_x_istnieje("sportowcy", zewnetrzne_id_sportowca=zewnetrzne_id_sportowca): + print(f"{c.OKCYAN}Dodaję nowego sportowca do bazy danych{c.ENDC}") + self.db.simple_insert_one("sportowcy", + zewnetrzne_id_sportowca=zewnetrzne_id_sportowca, + imie="Robert", + nazwisko="Lewandowski" + ) page = 0 match_num = 0 @@ -83,17 +88,14 @@ class scraper: retrieved_matches = safe_traverse(retrieved_page, ["lastMatches"], default=[]) for match in retrieved_matches: - match_id = safe_traverse(match, ["eventEncodedId"], default="non-existent-match-id") + match_id = safe_traverse(match, ["eventEncodedId"], default="non-existent-match-id") home_club_id = safe_traverse(match, ["homeParticipantUrl"], default="non-existent-club-id") away_club_id = safe_traverse(match, ["awayParticipantUrl"], default="non-existent-club-id") - # Sprawdź, czy mecz nie znajduje się już w bazie if self.czy_mecz_istnieje(zewnetrzne_id_meczu=match_id): stop_scraping = True break - # Sprawdź, czy klub znajduje się już w bazie. Jeśli nie, - # trzeba go dodać przed meczem. if not self.czy_klub_istnieje(id_klubu=home_club_id): print(f"{c.OKCYAN}Nowy klub{c.ENDC}: {home_club_id}") self.db.simple_insert_one("kluby", @@ -107,29 +109,42 @@ class scraper: pelna_nazwa=safe_traverse(match, ["awayParticipantName"]), skrocona_nazwa=safe_traverse(match, ["awayParticipant3CharName"])) - # TODO: (opcjonalnie) zamień *słownik match* na *obiekt mecz* + # TODO: Zamień słownik match na obiekt mecz + mecz = { + "zewnetrzne_id_meczu": match_id, + "data": safe_traverse(match, ["startTimeTimestamp"], default=0), + "id_klubu_gospodarzy": home_club_id, + "id_klubu_gosci": away_club_id, + "gole_gospodarzy": safe_traverse(match, ["homeScore", "current"], default=0), + "gole_gosci": safe_traverse(match, ["awayScore", "current"], default=0), + "rozgrywki": safe_traverse(match, ["tournament", "name"], default="Brak"), + "zewnetrzne_id_sportowca": zewnetrzne_id_sportowca + } - - - # TODO: dodaj obiekt mecz do bazy (simple_insert_one(), simple_insert_many()) - print(f"{c.OKCYAN}Nowy mecz ({match_num}){c.ENDC}: {match}") + # TODO: Dodaj obiekt mecz do bazy + self.db.simple_insert_one("mecze", **mecz) + + print(f"{c.OKCYAN}Nowy mecz ({match_num}){c.ENDC}: {match_id}") match_num += 1 - # TODO: Zaktualizuj statystyki sportowca + # np. zlicz gole RL9 + strzelcy = safe_traverse(match, ["goals"], default=[]) + liczba_goli = 0 + for gol in strzelcy: + if gol.get("playerId") == zewnetrzne_id_sportowca: + liczba_goli += 1 - - # Opcjonalnie: odczekaj kilka sekund (?) - # Problem w tym, że time.sleep() jest blokujące, - # a asyncio i flask nie idą ze sobą w parze. - # Można to załatwić osobnym skryptem, ale - # martwmy się tym dopiero, gdy dostaniemy - # rate limita. - sherl + if liczba_goli > 0: + # zwiększamy liczbę goli zawodnika + print(f"{c.OKBLUE}Zwiększam gole Lewandowskiego o {liczba_goli}{c.ENDC}") + self.db.increment_stat("sportowcy", {"zewnetrzne_id_sportowca": zewnetrzne_id_sportowca}, "gole", liczba_goli) page += 1 time.sleep(15) + def aktualizuj_dane(self): """ Pobiera mecze dla każdego sportowca wymienionego