from bs4 import BeautifulSoup import wantlist ''' Requires key.html as generated by the usual script. Download https://colors-tcg.eu/releasechecker.php, strip it to just the divs with class "list" and save as release.html. Save a file called wantlist.py with thelist = current wantlist in list format. This is based on release 192 being the only one not listed. Change nextrelease to the number of the next release. ''' nextrelease = 194 values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"] deckkey = {} decknames = [] with open("key.html") as decks: decksoup = BeautifulSoup(decks,"html.parser") soupdecks = decksoup.find("table",{"id":"colors"}) souprows = soupdecks.find_all("tr") souprows = souprows[1:] for row in souprows: soupcells = row.find_all("td") deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("ç","c").replace(".","").replace("politetness","politeness").replace("á","a") decktype = soupcells[3].text.lower() deckdict = {} if decktype in values: deckdict["type"] = decktype deckkey[deckname] = deckdict decknames.append(deckname) releasedict = {} with open("release.html") as releases: releasesoup = BeautifulSoup(releases,"html.parser") allreleases = releasesoup.find_all("div") for release in allreleases: releaseid = int(release.find("strong").text[-4:-1]) releasedecks = release.find("textarea").text.split(", ") releasedict[releaseid] = releasedecks for deck in decknames: deckkey[deck]["release"] = False releaseno = 1 while releaseno < nextrelease: if releaseno != 192: if deck in releasedict[releaseno]: deckkey[deck]["release"] = releaseno releaseno += 1 if not deckkey[deck]["release"]: deckkey[deck]["release"] = 192 releasecolours = {} therelease = 1 while therelease < nextrelease: red = 0 orange = 0 yellow = 0 green = 0 blue = 0 purple = 0 brown = 0 grey = 0 special = 0 for deck in decknames: if deckkey[deck]["release"] == therelease: if deckkey[deck]["type"] == "red": red += 20 elif deckkey[deck]["type"] == "orange": orange += 20 elif deckkey[deck]["type"] == "yellow": yellow += 20 elif deckkey[deck]["type"] == "green": green += 20 elif deckkey[deck]["type"] == "blue": blue += 20 elif deckkey[deck]["type"] == "purple": purple += 20 elif deckkey[deck]["type"] == "brown": brown += 20 elif deckkey[deck]["type"] == "gray": grey += 20 elif deckkey[deck]["type"] == "special": special += 20 releasecolours[therelease] = {"wantred":0,"hasred":red,"wantorange":0,"hasorange":orange,"wantyellow":0,"hasyellow":yellow,"wantgreen":0,"hasgreen":green,"wantblue":0,"hasblue":blue,"wantpurple":0,"haspurple":purple,"wantbrown":0,"hasbrown":brown,"wantgrey":0,"hasgrey":grey} therelease += 1 wantlist = wantlist.thelist for card in wantlist: deck = card[:-2] deckrelease = deckkey[deck]["release"] decktype = deckkey[deck]["type"] if decktype == "red": releasecolours[deckrelease]["wantred"] += 1 elif decktype == "orange": releasecolours[deckrelease]["wantorange"] += 1 elif decktype == "yellow": releasecolours[deckrelease]["wantyellow"] += 1 elif decktype == "green": releasecolours[deckrelease]["wantgreen"] += 1 elif decktype == "blue": releasecolours[deckrelease]["wantblue"] += 1 elif decktype == "purple": releasecolours[deckrelease]["wantpurple"] += 1 elif decktype == "brown": releasecolours[deckrelease]["wantbrown"] += 1 elif decktype == "gray": releasecolours[deckrelease]["wantgrey"] += 1 foundrelease = False foundcolour = False foundproportion = 0 releaseno = 1 while releaseno < nextrelease: if releasecolours[releaseno]["wantred"] > 0: if releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] > foundproportion: foundrelease = releaseno foundcolour = "red" foundproportion = releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] if releasecolours[releaseno]["wantorange"] > 0: if releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] > foundproportion: foundrelease = releaseno foundcolour = "orange" foundproportion = releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] if releasecolours[releaseno]["wantyellow"] > 0: if releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] > foundproportion: foundrelease = releaseno foundcolour = "yellow" foundproportion = releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] if releasecolours[releaseno]["wantgreen"] > 0: if releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] > foundproportion: foundrelease = releaseno foundcolour = "green" foundproportion = releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] if releasecolours[releaseno]["wantblue"] > 0: if releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] > foundproportion: foundrelease = releaseno foundcolour = "blue" foundproportion = releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] if releasecolours[releaseno]["wantpurple"] > 0: if releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] > foundproportion: foundrelease = releaseno foundcolour = "purple" foundproportion = releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] if releasecolours[releaseno]["wantbrown"] > 0: if releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] > foundproportion: foundrelease = releaseno foundcolour = "brown" foundproportion = releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] if releasecolours[releaseno]["wantgrey"] > 0: if releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] > foundproportion: foundrelease = releaseno foundcolour = "grey" foundproportion = releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] releaseno += 1 print("Release " + str(foundrelease) + ", " + foundcolour + ": " + str(100 * foundproportion) + "%")