diff --git a/Visual Studio Code Projects/Amazon-Price-Tracker/.env b/Visual Studio Code Projects/Amazon-Price-Tracker/.env new file mode 100644 index 0000000..9d8fd7e --- /dev/null +++ b/Visual Studio Code Projects/Amazon-Price-Tracker/.env @@ -0,0 +1,3 @@ +SMTP_ADDRESS="smtp.gmail.com" +EMAIL_ADDRESS="your_email@email.com" +EMAIL_PASSWORD="your app password" \ No newline at end of file diff --git a/Visual Studio Code Projects/Amazon-Price-Tracker/amazon-price-tracker.py b/Visual Studio Code Projects/Amazon-Price-Tracker/amazon-price-tracker.py new file mode 100644 index 0000000..bf6c85d --- /dev/null +++ b/Visual Studio Code Projects/Amazon-Price-Tracker/amazon-price-tracker.py @@ -0,0 +1,75 @@ +from bs4 import BeautifulSoup +import requests +import smtplib +import os +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +# Practice +# url = "https://appbrewery.github.io/instant_pot/" +# Live Site +url = "https://www.amazon.com/dp/B075CYMYK6?psc=1&ref_=cm_sw_r_cp_ud_ct_FM9M699VKHTT47YD50Q6" + +# ====================== Add Headers to the Request =========================== + +# header = { +# "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", +# "Accept-Encoding": "gzip, deflate, br, zstd", +# "Accept-Language": "en-GB,de;q=0.8,fr;q=0.6,en;q=0.4,ja;q=0.2", +# "Dnt": "1", +# "Priority": "u=1", +# "Sec-Fetch-Dest": "document", +# "Sec-Fetch-Mode": "navigate", +# "Sec-Fetch-Site": "none", +# "Sec-Fetch-User": "?1", +# "Sec-Gpc": "1", +# "Upgrade-Insecure-Requests": "1", +# "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0", +# } + +# A minimal header: + +header = { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", + "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8" +} + +# Adding headers to the request +response = requests.get(url, headers=header) + +soup = BeautifulSoup(response.content, "html.parser") +# Check you are getting the actual Amazon page back and not something else: +print(soup.prettify()) + +# Find the HTML element that contains the price +price = soup.find(class_="a-offscreen").get_text() + +# Remove the dollar sign using split +price_without_currency = price.split("$")[1] + +# Convert to floating point number +price_as_float = float(price_without_currency) +print(price_as_float) + +# Get the product title +title = soup.find(id="productTitle").get_text().strip() +print(title) + +# Set the price below which you would like to get a notification +BUY_PRICE = 70 + +if price_as_float < BUY_PRICE: + message = f"{title} is on sale for {price}!" + + # ====================== Send the email =========================== + + with smtplib.SMTP(os.environ["SMTP_ADDRESS"], port=587) as connection: + connection.starttls() + result = connection.login(os.environ["EMAIL_ADDRESS"], os.environ["EMAIL_PASSWORD"]) + connection.sendmail( + from_addr=os.environ["EMAIL_ADDRESS"], + to_addrs=os.environ["EMAIL_ADDRESS"], + msg=f"Subject:Amazon Price Alert!\n\n{message}\n{url}".encode("utf-8") + ) \ No newline at end of file