From bdfa31c8eaeb6a22236f4f2b0de9c302f7bec59a Mon Sep 17 00:00:00 2001 From: sherl Date: Tue, 3 Jun 2025 21:46:59 +0200 Subject: [PATCH 1/2] fix: check for id in simple_insert_one() to avoid breaking autoincrement --- FlaskWebProject/FlaskWebProject/lewy_db.py | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/FlaskWebProject/FlaskWebProject/lewy_db.py b/FlaskWebProject/FlaskWebProject/lewy_db.py index 0b5c515..2bf2ee9 100644 --- a/FlaskWebProject/FlaskWebProject/lewy_db.py +++ b/FlaskWebProject/FlaskWebProject/lewy_db.py @@ -10,6 +10,18 @@ import traceback global db +class c: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + ENDL = '\n' + class baza(): # global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze @@ -168,9 +180,9 @@ class baza(): try: return_val = func(self, *args, **kwargs) except: - print( "\033[91m" + print(f"{c.FAIL}" f"Wystąpił błąd podczas wykonywania zapytania SQL:" - "\033[0m" + f"{c.ENDC}" "\n" f"{traceback.format_exc()}") self.session.rollback() @@ -263,6 +275,14 @@ class baza(): if not isinstance(entity_type, str): entity_type = entity_type.__name__ + if "id" in kwargs: + print(f"{c.FAIL}UWAGA!{c.ENDC}") + print(f"Próbujesz dodać obiekt do tabeli, który ma już identyfikator.\n" + f"To spowoduje problemy w przyszłości, gdy będziesz chciał dodać nowy obiekt do bazy bez ustawiania id na sztywno\n" + f"(id klucza głównego nie zostanie zaktualizowane w sekwencji, przez co baza będzie próbowała dodać obiekt z id już istniejącego rekordu!).\n" + f"Aby naprawić dodawanie z autoinkrementującym kluczem zobacz {c.WARNING}https://stackoverflow.com/a/8745101{c.ENDC}\n" + f"Zostałeś ostrzeżony!") + print(f"[{round(time.time())}] INSERT") obj = self.entities[entity_type](**kwargs) From 35db71b8ccc0967d70297811e9290a63c6404d43 Mon Sep 17 00:00:00 2001 From: sherl Date: Wed, 4 Jun 2025 00:19:57 +0200 Subject: [PATCH 2/2] feat: get sportsmen full name and birthday from id --- FlaskWebProject/FlaskWebProject/fs_scraper.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/FlaskWebProject/FlaskWebProject/fs_scraper.py b/FlaskWebProject/FlaskWebProject/fs_scraper.py index 1e93c82..f7b9178 100644 --- a/FlaskWebProject/FlaskWebProject/fs_scraper.py +++ b/FlaskWebProject/FlaskWebProject/fs_scraper.py @@ -61,6 +61,34 @@ class scraper: # return False return self.__czy_x_istnieje("kluby", id_klubu=id_klubu) + def id_na_imie_nazwisko_urodziny(self, zewnetrzne_id_sportowca: str = "MVC8zHZD"): + """ + Scraper z dykty xD + Pobiera imiona, nazwiska i dni urodzin sportowców z zewnętrznego id. + Działa na słowo honoru. + + :param zewnetrzne_id_sportowca: Zewnętrzne id sportowca + :type zewnetrzne_id_sportowca: str + """ + if len(zewnetrzne_id_sportowca) != 8: + raise ValueError("Zewnętrzne ID sportowca powinno być długości 8!") + r = requests.get(f'https://www.flashscore.pl/?r=4:{zewnetrzne_id_sportowca}') + page = r.text + + name_start_pos = page.find("data-testid=\"wcl-scores-heading-02\">") + 36 + name_end_pos = page.find("", name_end_pos) + 39 + birthday_start_pos_2 = page.find("data-testid=\"wcl-scores-simpleText-01\">", birthday_start_pos_1) + 39 + birthday_start_pos_3 = page.find("data-testid=\"wcl-scores-simpleText-01\">", birthday_start_pos_2) + 39 + birthday_start_pos = page.find("data-testid=\"wcl-scores-simpleText-01\">", birthday_start_pos_3) + 39 + birthday_end_pos = page.find(" 20 else page[birthday_start_pos:birthday_end_pos].strip(" ()") + + return name, birthday + def aktualizuj_dane_sportowca(self, zewnetrzne_id_sportowca: str = "MVC8zHZD"): stop_scraping = False matches_to_add = []