75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
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")
|
|
) |