63 lines
1.6 KiB
Python
Executable File
63 lines
1.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import re
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
from dataclasses import dataclass, field
|
|
|
|
def get_price_in_gbp(price):
|
|
price_str = re.search(r'\d?,?\d+\.\d+', price).group()
|
|
price_str_no_comma = re.sub(",", "", price_str)
|
|
price_usd = float(price_str_no_comma)
|
|
price_gbp = usd_to_gbp(price_usd)
|
|
return price_gbp
|
|
|
|
def usd_to_gbp(dollars):
|
|
return round(dollars * 0.8, 2)
|
|
|
|
def get_dawnglare_html():
|
|
response = requests.get("https://mtg.dawnglare.com/?p=sets&pack=1")
|
|
|
|
if response.status_code != 200:
|
|
print("Request to Dawnglare failed with status code: " + response.status_code)
|
|
os.exit(1)
|
|
|
|
return response.text
|
|
|
|
@dataclass(order=True)
|
|
class ExpectedValue():
|
|
setName: str = field(compare=False)
|
|
boosterPackEV: float = field(compare=True)
|
|
|
|
@property
|
|
def prereleasePackEV(self):
|
|
return self.boosterPackEV * 6
|
|
|
|
def get_expected_values(soup):
|
|
prices = soup.find_all(class_="cP")
|
|
names = soup.find_all(class_="cN")
|
|
|
|
evs = []
|
|
for i in range(0, len(prices)):
|
|
setName = names[i].text
|
|
boosterPackEV = get_price_in_gbp(prices[i].text)
|
|
ev = ExpectedValue(setName, boosterPackEV)
|
|
evs.append(ev)
|
|
|
|
return evs
|
|
|
|
|
|
def main():
|
|
html = get_dawnglare_html()
|
|
soup = BeautifulSoup(html, features="lxml")
|
|
evs = get_expected_values(soup)
|
|
sorted_by_ev = sorted(evs, reverse=True)
|
|
|
|
print(f"{'Set Name':<40} | Prerelease Kit EV")
|
|
print("-" * 60)
|
|
for setEV in sorted_by_ev:
|
|
print(f'{setEV.setName:<40} | #{setEV.prereleasePackEV:,.2f}')
|
|
|
|
if __name__ == "__main__":
|
|
main()
|