aly revised this gist . Go to revision
1 file changed, 1 insertion
conk.py
| @@ -10,6 +10,7 @@ shop = { | |||
| 10 | 10 | # copy the numeric IDs from urls | |
| 11 | 11 | # e.g: | |
| 12 | 12 | # https://www.coles.com.au/product/monster-ultra-rosa-multipack-cans-4-x-500ml-4-pack-3990033 => 3990033 | |
| 13 | + | # the fields are (coles, woolies, iga) | |
| 13 | 14 | "coke": ("2993706", "623034", "848631"), | |
| 14 | 15 | "monster": ("3990033", "143253", None), | |
| 15 | 16 | } | |
aly revised this gist . Go to revision
1 file changed, 55 insertions
conk.py(file created)
| @@ -0,0 +1,55 @@ | |||
| 1 | + | #!/usr/bin/env python3 | |
| 2 | + | from requests import Session, get, post | |
| 3 | + | from bs4 import BeautifulSoup as Soup | |
| 4 | + | ||
| 5 | + | # Config | |
| 6 | + | webhook = "" # discord webhook | |
| 7 | + | ||
| 8 | + | shop = { | |
| 9 | + | # add entries for things you want to track | |
| 10 | + | # copy the numeric IDs from urls | |
| 11 | + | # e.g: | |
| 12 | + | # https://www.coles.com.au/product/monster-ultra-rosa-multipack-cans-4-x-500ml-4-pack-3990033 => 3990033 | |
| 13 | + | "coke": ("2993706", "623034", "848631"), | |
| 14 | + | "monster": ("3990033", "143253", None), | |
| 15 | + | } | |
| 16 | + | # end Config | |
| 17 | + | ||
| 18 | + | class Price: | |
| 19 | + | def __init__(self, coles, woolies, iga): | |
| 20 | + | self.coles = coles | |
| 21 | + | self.woolies = woolies | |
| 22 | + | self.iga = iga | |
| 23 | + | ||
| 24 | + | def sorted(self): | |
| 25 | + | price = {} | |
| 26 | + | if self.coles: | |
| 27 | + | price["coles"] = self.coles | |
| 28 | + | if self.woolies: | |
| 29 | + | price["woolies"] = self.woolies | |
| 30 | + | if self.iga: | |
| 31 | + | price["iga"] = self.iga | |
| 32 | + | return "\n".join(f"{name}: ${price:.2f}" for name,price in sorted(price.items(), key=lambda x: x[1])) | |
| 33 | + | ||
| 34 | + | out = {} | |
| 35 | + | ||
| 36 | + | for name,ids in shop.items(): | |
| 37 | + | coles,woolies,iga = None,None,None | |
| 38 | + | if ids[0]: | |
| 39 | + | coles = Soup(get(f"https://www.coles.com.au/product/{ids[0]}").text, "html.parser") | |
| 40 | + | if ids[2]: | |
| 41 | + | iga = get(f"https://www.igashop.com.au/api/storefront/stores/84996/products/{ids[2]}").json() | |
| 42 | + | ||
| 43 | + | if ids[1]: | |
| 44 | + | session = Session() | |
| 45 | + | session.headers["User-Agent"] = 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/116.0' | |
| 46 | + | session.get(f"https://www.woolworths.com.au/shop/productdetails/{ids[1]}") | |
| 47 | + | woolies = session.get(f"https://www.woolworths.com.au/api/v3/ui/schemaorg/product/{ids[1]}").json() | |
| 48 | + | ||
| 49 | + | out[name] = Price( | |
| 50 | + | float(coles.findAll("span", class_="price__value")[0].text[1:]) if coles else 0.0, | |
| 51 | + | woolies["offers"]["price"] if woolies else 0.0, | |
| 52 | + | float(iga["price"][1:]) if iga else 0.0 | |
| 53 | + | ) | |
| 54 | + | ||
| 55 | + | post(webhook, json={"content": "\n\n".join(f"**{name}**\n{price.sorted()}" for name,price in out.items())}) | |
Newer
Older