Citat:
Med en del jobb tror jag att jag fick filskapandet att fungera även för Fullträff:
Kod:
import requests
import re
import json
import itertools
import sys
gamemode = int(input("Spelform? 1= Stryktipset 2= Europatipset 3= Fullträff "))
if not gamemode in [1,2,3]:
print ("Endast 1-2 möjliga val. Avbryter.")
quit()
if gamemode == 3:
pgoal = int(input("Önskad summa (heltal) ? "))
pdev = float(input("Tolerabel +/- avvikelse decimaltal (t.ex. 0.05)? "))
pmin = pgoal-pdev
pmax = pgoal+pdev
else:
pmin = int(input("Golvnivå för antal streck (t.ex. 500)? "))
pmax = int(input("Taknivå för antal streck (t.ex. 550)? "))
mde = int(input("Tryck 1 för text-fil och 2 för CSV-fil: "))
if not mde in [1,2]:
print ("Endast 1 eller 2 möjliga val. Avbryter.")
quit()
urls = ["", "https://spela.svenskaspel.se/stryktipset" , "https://spela.svenskaspel.se/europatipset","https://spela.svenskaspel.se/fulltraff"]
url = urls[gamemode]
outfiles = ["","tips.txt","tips.csv"] # namn för dina output-filer
outfile = outfiles[mde]
response = requests.get(url)
html_content = response.text
pattern = r'_svs\.tipsen\.data\.preloadedState\s*=\s*(\{.*\});'
match = re.search(pattern, html_content)
json_str = match.group(1)
json_obj = json.loads(json_str)
gameDict = json_obj["EventTypeStatistic"]
gameKeys = list(dict.keys(gameDict))
signlists = []
if gamemode == 3: # om fullträff, sätt upp lista utifrån 13 rader
rowlist=[]
draws=json_obj["Draws"]["entities"]
drawsKey = list(dict.keys(draws))[0]
omg=draws[drawsKey]["drawNumber"]
#print(draws)
#print(drawsKey)
print(f"Fullträff omgång {omg}:")
else: # annars sätt upp lista utifrån 3 tecken
for _ in range(0,3):
signlists.append([])
for gameKey in gameKeys: # iterera över alla 13 matcher
if gamemode==3: # Fullträff
game = gameDict[gameKey]["odds"]["current"]["value"] # hämtar odds-värden från Fullträff-sidan
gamesum = 0.0
floats = []
fgame = []
for i in range(0,6):
f = float(game[i])
floats.append(f)
gamesum = sum(floats)
for ix,o in enumerate(floats):
newo = 100.0 * o / gamesum # normalfördela fullträff-oddsen så att summan blir 100.0
if ix<6:
fgame.append(newo)
rowlist.append(fgame)
else: # Tipsspel
game = gameDict[gameKey]["distributions"][str(gamemode)]["Global"]["current"]["value"] # Hämta streckfördelning
if gamemode<3:
for ix,perc in enumerate(game):
if perc is not None:
signlists[ix].append(int(perc)) # använd heltal för tipsen
if gamemode<3:
P = { "1": signlists[0], "X": signlists[1], "2": signlists[2] }
rows = itertools.product(*(['1X2'] * 13))
cn = 0
with open(outfile, 'w') as f:
for row in rows:
percentage = sum(P[result][n] for (n, result) in enumerate(row))
if pmin <= percentage <= pmax:
cn += 1
if mde==1:
f.write("E,"+','.join(row)+"\n")
if mde==2:
f.write(','.join(row + (str(percentage),))+"\n")
else:
maxcoupons = 10000
cn = 0
tsts = 0
#for ix,row in enumerate(rowlist):
#print(ix,":",row)
valid_combinations = []
for comb in itertools.product(*[enumerate(row) for row in rowlist]): # Cartesian product of all rows with enumerated elements
indices, values = zip(*comb) # Unzip the enumerated pairs into indices and values
s = sum(values)
tsts += 1
if tsts % 1000000 == 0:
print(int(tsts / 1000000)," million iterations")
if pmin <= s <= pmax:
if mde == 2:
indices=list(indices)+[s]
valid_combinations.append(indices)
#print (" ".join(str(nm) for nm in indices))
cn += 1
if cn>=maxcoupons:
break
with open(outfile, 'w') as f:
f.write(f"Fulltraff,Omg={omg}\n") # första raden
for comb in valid_combinations:
if mde == 1: # TXT-läge
comb=list(comb)
comb.pop() # ta bort summa som inte används i TXT-läge
f.write("E,"+','.join(str(nm) for nm in comb)+"\n")
elif mde == 2: # CSV-läge
f.write(','.join(str(nm) for nm in comb)+"\n")
print(f"{outfile} skapad med {cn} rader!")