mirror of
https://git.mirrors.martin98.com/https://github.com/mendableai/firecrawl
synced 2025-08-04 18:10:41 +08:00
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
import os
|
|
import asyncio
|
|
from database import Database
|
|
from dotenv import load_dotenv
|
|
from firecrawl import FirecrawlApp
|
|
from scraper import scrape_product
|
|
from notifications import send_price_alert
|
|
|
|
load_dotenv()
|
|
|
|
db = Database(os.getenv("POSTGRES_URL"))
|
|
app = FirecrawlApp()
|
|
|
|
# Threshold percentage for price drop alerts (e.g., 5% = 0.05)
|
|
PRICE_DROP_THRESHOLD = 0.05
|
|
|
|
|
|
async def check_prices():
|
|
products = db.get_all_products()
|
|
product_urls = set(product.url for product in products)
|
|
|
|
for product_url in product_urls:
|
|
# Get the price history
|
|
price_history = db.get_price_history(product_url)
|
|
if not price_history:
|
|
continue
|
|
|
|
# Get the earliest recorded price
|
|
earliest_price = price_history[-1].price
|
|
|
|
# Retrieve updated product data
|
|
updated_product = scrape_product(product_url)
|
|
current_price = updated_product["price"]
|
|
|
|
# Add the price to the database
|
|
db.add_price(updated_product)
|
|
print(f"Added new price entry for {updated_product['name']}")
|
|
|
|
# Check if price dropped below threshold
|
|
if earliest_price > 0: # Avoid division by zero
|
|
price_drop = (earliest_price - current_price) / earliest_price
|
|
if price_drop >= PRICE_DROP_THRESHOLD:
|
|
await send_price_alert(
|
|
updated_product["name"], earliest_price, current_price, product_url
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(check_prices())
|