Lotto2PY/lotto2py.py
2025-07-24 15:50:32 +02:00

257 lines
9.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
from bs4 import BeautifulSoup
import re
from datetime import datetime
import pymysql
telegram_chat_id = "322673713"
telegram_token ='680737840:AAEaa7Vxl_kZz_LWS1_S-lH6Eda7HXqu6Y4'
def notify_telegram(text):
params = {"parse_mode": "HTML", "chat_id": telegram_chat_id, "text": text}
url = f"https://api.telegram.org/bot{telegram_token}/sendMessage"
requests.post(url, params=params)
def Euro():
url = 'https://www.ard-text.de/mobil/583'
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
ziffern = []
ZahlenEuro = {
'Freitag': {'Datum': '', 'Z1': '', 'Z2': '', 'Z3': '', 'Z4': '', 'Z5': '', 'Eurozahl1': '', 'Eurozahl2': ''},
'Dienstag': {'Datum': '', 'Z1': '', 'Z2': '', 'Z3': '', 'Z4': '', 'Z5': '', 'Eurozahl1': '', 'Eurozahl2': ''}}
Tag = 'Freitag'
for b in soup.find("p", string=lambda s: s and "freitag" in s.lower()):
ZahlenEuro[Tag]['Datum'] = b
tabelle = b.find_parent().find_next_sibling("table")
a = 1
for n in tabelle.find_all("td"):
c = (n.get_text(strip=True))
b = 'Z' + str(a)
ZahlenEuro[Tag][b] = int(c)
a = a + 1
for x in soup.find("p", string=lambda s: s and "eurozahlen" in s.lower()):
eurotabelle = x.find_parent().find_next_sibling("table")
aa = 1
for m in eurotabelle.find_all("td"):
c = (m.get_text(strip=True))
bb = 'Eurozahl' + str(aa)
ZahlenEuro[Tag][bb] = int(c)
aa = aa + 1
Tag = 'Dienstag'
for b in soup.find("p", string=lambda s: s and "dienstag" in s.lower()):
ZahlenEuro[Tag]['Datum'] = b
tabelle = b.find_parent().find_next_sibling("table")
a = 1
print(b)
for n in tabelle.find_all("td"):
c = (n.get_text(strip=True))
b = 'Z' + str(a)
ZahlenEuro[Tag][b] = int(c)
a = a + 1
eurozahlen_tags = soup.find_all("b", string=lambda s: s and "eurozahlen" in s.lower())
aa = 1
if len(eurozahlen_tags) >= 2:
eurozahlen_table_2 = eurozahlen_tags[1].find_next("table")
eurozahlen_2 = [td.text.strip() for td in eurozahlen_table_2.find_all("td")]
for i in eurozahlen_2:
bb = 'Eurozahl' + str(aa)
ZahlenEuro[Tag][bb] = int(i)
aa = aa + 1
return ZahlenEuro
def Normalziehung(a):
wochentag = datetime.today().weekday()
jahr = datetime.now().year
url = "https://www.ard-text.de/mobil/" + str(a)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
# Den relevanten Abschnitt als Text extrahieren
text = soup.get_text(separator="\n")
# Lottozahlen: 6 aus 49, Zusatzzahl und Superzahl
lottozahlen = []
superzahl = None
spiel77 = []
super6 = []
datum_woche = None
Lottozahlen = {'Datum': '', 'Z1': '', 'Z2': '', 'Z3': '', 'Z4': '', 'Z5': '', 'Z6': '', 'Superzahl': '',
'Spiel77': '', 'Super6': ''}
# Wochentext extrahieren (z.B. "28. Woche / 09.07.25")
for line in text.splitlines():
if "Woche" in line and "/" in line:
datum_woche = line.strip()
break
# Regex: Hauptzahlen finden (z.B. Zeile enthält "11 20 28 30 35 41")
match_haupt = re.search(r"\s(\d{1,2}(?:\s+\d{1,2}){5})\s", text)
if match_haupt:
lottozahlen = [int(n) for n in match_haupt.group(1).split()]
# Superzahl (z.B. nach dem Begriff "Superzahl")
match_super = re.search(r"Superzahl[^0-9]*([0-9]{1,2})", text)
if match_super:
superzahl = int(match_super.group(1))
# Spiel 77 suchen (genau 7 Ziffern)
match_spiel77 = re.search(r"Spiel\s*77[^0-9]*((?:\d\s*){7})", text)
if match_spiel77:
# spiel77 = match_spiel77.group(1)
spiel77 = [int(n) for n in match_spiel77.group(1).split()]
# Super 6 suchen (genau 6 Ziffern)
match_super6 = re.search(r"Super\s*6[^0-9]*((?:\d\s*){6})", text)
if match_super6:
# super61 = match_super6.group(1)
super6 = [int(n) for n in match_super6.group(1).split()]
# Ausgabe
lottozahlen.sort()
ab = 'Z'
cd = 1
subber6 = ''
game77 = ''
for i in super6:
subber6 = subber6 + str(i)
for i in spiel77:
game77 = game77 + str(i)
for i in lottozahlen:
ef = str((ab + str(cd)))
Lottozahlen[ef] = i
cd = cd + 1
Lottozahlen['Datum'] = str(jahr) + ' / ' + str(datum_woche)
Lottozahlen['Superzahl'] = superzahl
Lottozahlen['Spiel77'] = int(game77)
Lottozahlen['Super6'] = int(subber6)
return Lottozahlen
def SQLnorm(data):
connection = pymysql.connect(db="hubobel",
user="hubobel",
passwd="polier2003",
host='10.0.1.123', charset='utf8')
cursor = connection.cursor()
sql = "INSERT INTO `6aus49`(`datum`, `z1`, `z2`, `z3`, `z4`, `z5`, `z6`, `sz`, `super6`, `spiel77`) VALUES" \
" ('" + str(data['Datum']) + "','" + str(data['Z1']) + "','" + str(data['Z2']) + "','" + str(data['Z3']) + \
"','" + str(data['Z4']) + "','" + str(data['Z5']) + "','" + str(data['Z6']) + "','" + str(data['Superzahl']) + \
"','" + str(data['Super6']) + "','" + str(data['Spiel77']) + "')"
sql_q = "SELECT * FROM 6aus49 WHERE datum like '%" + data['Datum'] + "%'"
resp = cursor.execute(sql_q)
if resp == 0:
cursor.execute(sql)
connection.commit()
cursor.close()
connection.close()
def SQLdienstag(data):
connection = pymysql.connect(db="hubobel",
user="hubobel",
passwd="polier2003",
host='10.0.1.123', charset='utf8')
cursor = connection.cursor()
sql = "INSERT INTO `euro`(`datum`, `z1`, `z2`, `z3`, `z4`, `z5`, `sz1`, `sz2`) VALUES" \
" ('" + str(data['Datum']) + "','" + str(data['Z1']) + "','" + str(data['Z2']) + "','" + str(data['Z3']) + \
"','" + str(data['Z4']) + "','" + str(data['Z5']) + "','" + str(data['Eurozahl1']) + "','" + str(
data['Eurozahl2']) + "')"
sql_q = "SELECT * FROM euro WHERE datum like '%" + data['Datum'] + "%'"
resp = cursor.execute(sql_q)
if resp == 0:
cursor.execute(sql)
print(resp)
connection.commit()
cursor.close()
connection.close()
def SQLfreitag(data):
connection = pymysql.connect(db="hubobel",
user="hubobel",
passwd="polier2003",
host='10.0.1.123', charset='utf8')
cursor = connection.cursor()
sql = "INSERT INTO `euro`(`datum`, `z1`, `z2`, `z3`, `z4`, `z5`, `sz1`, `sz2`) VALUES" \
" ('" + str(data['Datum']) + "','" + str(data['Z1']) + "','" + str(data['Z2']) + "','" + str(data['Z3']) + \
"','" + str(data['Z4']) + "','" + str(data['Z5']) + "','" + str(data['Eurozahl1']) + "','" + str(
data['Eurozahl2']) + "')"
sql_q = "SELECT * FROM euro WHERE datum like '%" + data['Datum'] + "%'"
resp = cursor.execute(sql_q)
if resp == 0:
cursor.execute(sql)
connection.commit()
cursor.close()
connection.close()
def SQLsamstag(data):
connection = pymysql.connect(db="hubobel",
user="hubobel",
passwd="polier2003",
host='10.0.1.123', charset='utf8')
cursor = connection.cursor()
sql = "INSERT INTO `samstag`(`datum`, `z1`, `z2`, `z3`, `z4`, `z5`, `z6`, `sz`, `super6`, `spiel77`) VALUES" \
" ('" + str(data['Datum']) + "','" + str(data['Z1']) + "','" + str(data['Z2']) + "','" + str(data['Z3']) + \
"','" + str(data['Z4']) + "','" + str(data['Z5']) + "','" + str(data['Z6']) + "','" + str(data['Superzahl']) + \
"','" + str(data['Super6']) + "','" + str(data['Spiel77']) + "')"
sql_q = "SELECT * FROM samstag WHERE datum like '%" + data['Datum'] + "%'"
resp = cursor.execute(sql_q)
if resp == 0:
cursor.execute(sql)
connection.commit()
cursor.close()
connection.close()
def SQLmittwoch(data):
connection = pymysql.connect(db="hubobel",
user="hubobel",
passwd="polier2003",
host='10.0.1.123', charset='utf8')
cursor = connection.cursor()
sql = "INSERT INTO `mittwoch`(`datum`, `z1`, `z2`, `z3`, `z4`, `z5`, `z6`, `sz`, `super6`, `spiel77`) VALUES" \
" ('" + str(data['Datum']) + "','" + str(data['Z1']) + "','" + str(data['Z2']) + "','" + str(data['Z3']) + \
"','" + str(data['Z4']) + "','" + str(data['Z5']) + "','" + str(data['Z6']) + "','" + str(data['Superzahl']) + \
"','" + str(data['Super6']) + "','" + str(data['Spiel77']) + "')"
sql_q = "SELECT * FROM samstag WHERE datum like '%" + data['Datum'] + "%'"
resp = cursor.execute(sql_q)
if resp == 0:
cursor.execute(sql)
connection.commit()
cursor.close()
connection.close()
wochentag = datetime.today().weekday()
wochentag = 2
if wochentag == 2:
Zahl = Normalziehung(582)
SQLnorm(Zahl)
SQLmittwoch(Zahl)
notify_telegram(str(Zahl))
elif wochentag == 5:
Zahl = Normalziehung(581)
SQLnorm(Zahl)
SQLsamstag(Zahl)
notify_telegram(str(Zahl))
elif wochentag == 1:
Zahl = Euro()
SQLdienstag(Zahl['Dienstag'])
notify_telegram(str(Zahl['Dienstag']))
elif wochentag == 4:
Zahl = Euro()
SQLfreitag(Zahl['Freitag'])
notify_telegram(str(Zahl['Freitag']))
else:
quit()