Lotto2PY/lotto2py.py
2025-10-19 17:29:26 +02:00

375 lines
13 KiB
Python
Raw Permalink 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.

This file contains Unicode characters that might be confused with other characters. 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
import json
import os
import sys
def conf():
appname = os.path.basename(sys.argv[0])
appname = appname.replace(".py", ".conf")
absFilePath = os.path.abspath(__file__)
absFilePath = absFilePath.replace(".py", ".conf")
if os.path.isfile(absFilePath) is False:
print(appname + ' scheint es nicht zu geben.')
print('Ich lege eine neue Datei ' + appname + ' an.')
passw = {'mail':
{
"mail_pass": "",
"mail_user": "",
"mail_host": "",
"mail_folder": ""
},
'Telegram':
{
"Chat_ID": "",
"TOKEN": ""
}
}
print(str(appname) + ' bitte entsprechend befüllen.')
with open(absFilePath, 'w') as fp:
json.dump(passw, fp, sort_keys=True, indent=4)
quit()
else:
with open(absFilePath) as file:
passw = json.load(file)
return passw
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'
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")
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
jahr = datetime.now().year
tag = datetime.now().day
monat = datetime.now().month
ZahlenEuro[Tag]['Datum'] = f"{jahr}-{monat}-{tag}"
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
jahr = datetime.now().year
tag = datetime.now().day
monat = datetime.now().month
ZahlenEuro[Tag]['Datum'] = f"{jahr}-{monat}-{tag}"
return ZahlenEuro
def Normalziehung(a):
wochentag = datetime.today().weekday()
jahr = datetime.now().year
tag = f"{datetime.now().day:02d}"
monat = datetime.now().month
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}){6})\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'] = f"{jahr}-{monat}-{tag}"
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 test == 0:
cursor.execute(sql)
notify_telegram(str(data))
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 test == 0:
cursor.execute(sql)
notify_telegram(str(data))
#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 test == 0:
cursor.execute(sql)
notify_telegram(str(data))
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 test == 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 test == 0:
cursor.execute(sql)
connection.commit()
cursor.close()
connection.close()
def SQLtesteuro(data):
print(data)
connection = pymysql.connect(
host='10.0.1.123',
user='hubobel',
password='polier2003',
database='hubobel',
charset='utf8mb4',
cursorclass=pymysql.cursors.Cursor
)
try:
with connection.cursor() as cursor:
# Beispielwerte
z1, z2, z3, z4, z5 = data['Z1'], data['Z2'],data['Z3'],data['Z4'],data['Z5']
sql_check = """
SELECT 1 FROM `euro`
WHERE z1 = %s AND z2 = %s AND z3 = %s AND z4 = %s AND z5 = %s
LIMIT 1
"""
cursor.execute(sql_check, (z1, z2, z3, z4, z5))
exists = cursor.fetchone() is not None
if exists:
print("✅ Kombination existiert bereits.")
a = 1
else:
print("🆕 Kombination ist neu kann eingefügt werden.")
a = 0
finally:
connection.close()
return a
def SQLtestsechs(data):
print(data)
connection = pymysql.connect(
host='10.0.1.123',
user='hubobel',
password='polier2003',
database='hubobel',
charset='utf8mb4',
cursorclass=pymysql.cursors.Cursor
)
try:
with connection.cursor() as cursor:
# Beispielwerte
z1, z2, z3, z4, z5, z6 = data['Z1'], data['Z2'],data['Z3'],data['Z4'],data['Z5'],data['Z6']
sql_check = """
SELECT 1 FROM `6aus49`
WHERE z1 = %s AND z2 = %s AND z3 = %s AND z4 = %s AND z5 = %s AND z6 = %s
LIMIT 1
"""
cursor.execute(sql_check, (z1, z2, z3, z4, z5, z6))
exists = cursor.fetchone() is not None
if exists:
print("✅ Kombination existiert bereits.")
a = 1
else:
print("🆕 Kombination ist neu kann eingefügt werden.")
a = 0
finally:
connection.close()
return a
passw = conf()
telegram_chat_id = passw['Telegram']['Chat_ID']
telegram_token = passw['Telegram']['TOKEN']
wochentag = datetime.today().weekday()
#wochentag = 4
if wochentag == 2:
Zahl = Normalziehung(582)
test = SQLtestsechs(Zahl)
SQLnorm(Zahl)
elif wochentag == 5:
Zahl = Normalziehung(581)
test = SQLtestsechs(Zahl)
SQLnorm(Zahl)
elif wochentag == 1:
Zahl = Euro()
test = SQLtesteuro(Zahl['Dienstag'])
SQLdienstag(Zahl['Dienstag'])
elif wochentag == 4:
Zahl = Euro()
test = SQLtesteuro(Zahl['Freitag'])
SQLfreitag(Zahl['Freitag'])
else:
quit()