import json
import time
import pprint
import re
import sys
import urllib
import smtplib
import requests
import random
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header
lista3 = []
lista = []
Zakazana_Lista = [] # Konieczne do zabezpieczenia przed ponownym wysyłaniem
tablica_minut = []
########################### POBIERANIE LINKÓW DO MECZY NA ŻYWO ###################################################
while(True):
Randomowy_Czas2 = random.randint(6,10)
time.sleep(Randomowy_Czas2)
url = "https://fb.oddsportal.com/feed/livegames/live/3/0.dat?_{}".format(int(time.time() * 1000))
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
result = re.search("globals.jsonpCallback\('/feed/livegames/live/3/0.dat', (.*)\);", page.text)
if not result:
sys.exit("Result not found")
json_text = result.group(1)
json_data = json.loads(json_text).get('d')
soup = BeautifulSoup(json_data.get('text', ''), 'html.parser')
nameList = soup.findAll('td',{'class':'name table-participant'})
########################################################################################################################
####################################### PRZESIEW LINKOW ################################################################
for name in nameList:
if f"{name.find('a', href=True).get('href')}"=="javascript:void(0);":
continue
else:
Link = ("https://www.oddsportal.com"f"{name.find('a', href=True).get('href')}")
url = Link
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
soup1 = BeautifulSoup(page.text, 'html.parser')
czas = soup1.find('p',{'class':'result-live'})
punkty = soup1.find('span',{'class':'live-score'})
print(czas)
if punkty is None:
print("natrafilismy na pulapke 1 i pomijamy")
continue
if (czas == str('<p class="result-live"></p>')) or (czas is None): ### NONE dla meczy skonczonych #### <p class="result-live"></p> dla rozpoczynających
print("natrafilismy na pulapke 2 i pomijamy")
continue
############################################################################################################################################################
############################################################# WARUNEKI NA POLOWE MECZU ####################################################################################
if czas.find('strong').text == "Half-time 10" + "\'" or czas.find('strong').text == "Half-time 12" + "\'" or czas.find('strong').text == "Half-time" or czas.find('strong').text == "Half-time 9" +"\'" :
###############################################################################################################################################
############################################## ZBIERANIE DANYCH DO WARUNKU "KWARTA PONIZEJ 10 PKT" ###########################################
jedynka = czas.text
Znak_1 = jedynka.index("(")
Znak_2 = jedynka.index(",")
Pierwszy = str(jedynka[int(Znak_1)+1:int(Znak_2)])
Znak_3 = jedynka.index(")")
Drugi = str(jedynka[int(Znak_2)+2:int(Znak_3)])
Jeden, Dwa = Pierwszy.split(":")
Trzy, Cztery = Drugi.split(":")
##############################################################################################################################################
################################### "WYGRZEBANIE" GŁEBOKO UKRYTYCH ZMIENNYCH JSNOW I ZMIENNYCH URL ###########################################
temp = Link
url = Link
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
script = soup.select_one('script:contains("new OpHandler")').text
json_text = re.search('PageEvent\((.*?)\);', script)
if not json_text:
print('script not found')
sys.exit()
try:
json_data = json.loads(json_text.group(1))
except ValueError:
print('json not parsed')
sys.exit()
id1 = json_data.get('id')
id2 = urllib.parse.unquote(json_data.get('xhash'))
Przedmeczowy1_url = 'https://fb.oddsportal.com/feed/match/1-3-{}-2-1-{}.dat?_={}'
Przedmeczowy_Url = Przedmeczowy1_url.format(id1, id2, int(time.time() * 1000))
print(Przedmeczowy_Url)
Live1_url = 'https://fb.oddsportal.com/feed/live/1-3-{}-2-1-{}.dat?_={}'
Live_Url = Live1_url.format(id1, id2, int(time.time() * 1000))
print(Live_Url)
UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/match/1-3-{}-2-1-{}.dat'"
Przedmeczowy_JSON = UniwersalnyJSON1.format(id1,id2)
print(Przedmeczowy_JSON)
UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/live/1-3-{}-2-1-{}.dat'"
Live_JSON = UniwersalnyJSON1.format(id1,id2)
print(Live_JSON)
##############################################################################################################################
################################ UZYSKIWANIE DANYCH PRZEDMECZOWYCH ###########################################################
url = f"{Przedmeczowy_Url}"
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
result = re.search(f"{Przedmeczowy_JSON}, (.*)\);", page.text)
if not result:
sys.exit("Result not found")
json_text = result.group(1)
json_data = json.loads(json_text).get('d')
json_data2 = json.loads(json_text)
############################################################################################################################
#################################### WYDOBYCIE PRZEDMECZOWEJ LINII 1 WERSJA ###############################################
if not json_data['oddsdata']['back']:
print("pusty przedmeczowy JSON")
continue
else:
m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
gd = max(m, key=m.get)
print(gd[8:-2])
srednia = float(gd[8:-2])
print(srednia)
#################################################################################################################################
######################################## SELEKCJONOWANIE UZYSKANYCH DANYCH PRZEDMECZOWYCH ######################################
punkty = soup1.find('span',{'class':'live-score'}).text
PunktyGoscia, PunktyGospodarza = punkty.split(":")
print(f"{PunktyGoscia} - {PunktyGospodarza}")
Polowa = (int(PunktyGoscia) + int(PunktyGospodarza))*2
print(Polowa)
Procent = ((float(Polowa) - float(srednia))/float(srednia) )*100
Sformatowany_Procent = f'{Procent:2.2f}'
print(float(Sformatowany_Procent))
logiczna = False
##################################################################################################################################
############################################## DANE LIVE ########################################################################
url = f"{Live_Url}"
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
result = re.search(f"{Live_JSON}, (.*)\);", page.text)
if not result:
sys.exit("Result not found")
json_text = result.group(1)
json_data = json.loads(json_text).get('d')
json_data2 = json.loads(json_text)
############################################################################################################################
#################################### WYDOBYCIE LIVE LINII 1 WERSJA ###############################################
if not json_data['oddsdata']['back']:
print("pusty live JSON")
continue
else:
m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
gd = max(m, key=m.get)
print(gd[8:-2])
srednia_live = float(gd[8:-2])
print(srednia_live)
################################################################################################################
################################# WYSYŁANIE E-MAILI ############################################################
if Zakazana_Lista == []:
if (float(Sformatowany_Procent) >=29):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\nPunkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
if (float(Sformatowany_Procent) <= -29):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\nPunkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
if (float(Sformatowany_Procent) <= -20 and (int(Jeden)<10 or int(Dwa)<10 or int(Trzy)<10 or int(Cztery)<10)):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% + PONIZEJ 10 PKT po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
############################################################################################################################
###################################### ZABEZPIECZENIE PRZED PONOWNYM WYSŁANIEM MECZU #######################################
else:
for j in Zakazana_Lista :
if (j == temp):
logiczna = True
break
if logiczna == False:
if (float(Sformatowany_Procent) >=29):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
logiczna == True
if (float(Sformatowany_Procent) <= -20 and (int(Jeden)<10 or int(Dwa)<10 or int(Trzy)<10 or int(Cztery)<10)):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% + PONIZEJ 10 PKT po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
logiczna == True
if (float(Sformatowany_Procent) <= -29):
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['***************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Zakazana_Lista.append(temp)
logiczna == True
print(czas.find('strong').text)
if (czas.find('strong').text=="3rd Quarter 9\'"):
temp = Link
url = Link
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
script = soup.select_one('script:contains("new OpHandler")').text
json_text = re.search('PageEvent\((.*?)\);', script)
if not json_text:
print('script not found')
sys.exit()
try:
json_data = json.loads(json_text.group(1))
except ValueError:
print('json not parsed')
sys.exit()
id1 = json_data.get('id')
id2 = urllib.parse.unquote(json_data.get('xhash'))
Przedmeczowy1_url = 'https://fb.oddsportal.com/feed/match/1-3-{}-2-1-{}.dat?_={}'
Przedmeczowy_Url = Przedmeczowy1_url.format(id1, id2, int(time.time() * 1000))
print(Przedmeczowy_Url)
UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/match/1-3-{}-2-1-{}.dat'"
Przedmeczowy_JSON = UniwersalnyJSON1.format(id1,id2)
print(Przedmeczowy_JSON)
##############################################################################################################################
################################ UZYSKIWANIE DANYCH PRZEDMECZOWYCH ###########################################################
url = f"{Przedmeczowy_Url}"
headers = {
'User-Agent': 'curl/7.64.0',
'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
}
page = requests.get(url, headers=headers)
result = re.search(f"{Przedmeczowy_JSON}, (.*)\);", page.text)
if not result:
sys.exit("Result not found")
json_text = result.group(1)
json_data = json.loads(json_text).get('d')
json_data2 = json.loads(json_text)
############################################################################################################################
#################################### WYDOBYCIE PRZEDMECZOWEJ LINII 1 WERSJA ###############################################
if not json_data['oddsdata']['back']:
print("pusty przedmeczowy JSON")
continue
else:
m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
gd = max(m, key=m.get)
print(gd[8:-2])
srednia = float(gd[8:-2])
print(srednia)
########################################################### ROZDZIELENIE PUNKTOW W KWARTACH #######################################################
###################################################################################################################################################
jedynka = czas.text
Znak_1 = jedynka.index("(")
Znak_2 = jedynka.index(",")
Pierwszy = str(jedynka[int(Znak_1)+1:int(Znak_2)])
Znak_3 = jedynka.index(",",30,37)
Drugi = str(jedynka[int(Znak_2)+2:int(Znak_3)])
Znak_4 = jedynka.index(")")
Trzeci = str(jedynka[int(Znak_3)+2:int(Znak_4)])
Jeden, Dwa = Pierwszy.split(":")
Trzy, Cztery = Drugi.split(":")
Piec, Szesc = Trzeci.split(":")
##################################################### OBLICZANIE PROCENTOW KWARTOWYCH ####################################################
procent1 = ((float(srednia)-(float(Jeden)+float(Dwa))*4)/float(srednia))*-100
Sformatowany_procent1 = f'{procent1:2.2f}'
procent2 = ((float(srednia)-(float(Trzy)+float(Cztery))*4)/float(srednia))*-100
Sformatowany_procent2 = f'{procent2:2.2f}'
procent3 = ((float(srednia-4)-(float(Piec)+float(Szesc))*4)/float(srednia-4))*-100
Sformatowany_procent3 = f'{procent3:2.2f}'
Procent_Kwartowy1 = abs(float(Sformatowany_procent2)-float(Sformatowany_procent1))
Procent_Kwartowy2 = abs(float(Sformatowany_procent3)-float(Sformatowany_procent2))
print(Procent_Kwartowy1)
print(Procent_Kwartowy2)
if (Procent_Kwartowy2+Procent_Kwartowy1)>=100:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('[email protected]','cegvrlziyznywhts')
sender = '[email protected]'
receivers = ['*****************']
message = MIMEText('Python', 'plain', 'utf-8')
message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n1 Kwarta: {Sformatowany_procent1}%\n2 Kwarta: {Sformatowany_procent2}%\n3 Kwarta: {Sformatowany_procent3}%\nLink do meczu to: {temp}")
subject = 'Bardzo uzyteczny robot'
message['Subject'] = Header(subject)
msg = f"{subject}\n\n{message}"
server.sendmail(
'[email protected]',
'***************',
msg.encode()
)
Randomowy_Czas = random.randint(38,73)
time.sleep(Randomowy_Czas)
Dla urozmaicenia też czasem wyskakuje ten błąd : "ConnectionRefusedError: [WinError 10061] Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia".
Stwierdziłem, że może troche przesadą było ciągłe pobieranie danych ze strony stad te time.sleep, zmieniłem też ustawienia w karcie sieciowej tak aby nie wyłączało mi wifi w laptopie żęby zaoszczędzić energie ale to nie pomogło, skrypt ciągle się urywa.