[+] GPU alert
This commit is contained in:
+30
-4
@@ -7,11 +7,15 @@ from selenium.webdriver import Chrome
|
|||||||
from selenium.webdriver.chrome.options import Options
|
from selenium.webdriver.chrome.options import Options
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
|
from bestbuy_utils import get_availability, avail_str, get_avail_v2
|
||||||
from utils import parse_retry, TelegramReporter, CSS
|
from utils import parse_retry, TelegramReporter, CSS
|
||||||
|
|
||||||
# Config
|
# Config
|
||||||
# Price increase ratio threshold (ignore everything higher than this ratio)
|
# Price increase ratio threshold (ignore everything higher than this ratio)
|
||||||
INCR_MAX = 0.2
|
INCR_MAX = 0.2
|
||||||
|
ALERT_MODELS = ['3060 ti', '3070', '3070 ti', '3080']
|
||||||
|
ALERT_MIN_AVAILABLE = 2
|
||||||
|
|
||||||
# Telegram chat ID that receives update messages (could be a channel in @channel_id format)
|
# Telegram chat ID that receives update messages (could be a channel in @channel_id format)
|
||||||
# TG_RECEIVER = 1770239825
|
# TG_RECEIVER = 1770239825
|
||||||
TG_RECEIVER = '@toronto_bestbuy_gpu'
|
TG_RECEIVER = '@toronto_bestbuy_gpu'
|
||||||
@@ -46,6 +50,8 @@ def shorten_title(title: str):
|
|||||||
|
|
||||||
|
|
||||||
def parse_page(browser: Chrome):
|
def parse_page(browser: Chrome):
|
||||||
|
become_available = []
|
||||||
|
|
||||||
# Parse page
|
# Parse page
|
||||||
for item in browser.find_elements(By.CLASS_NAME, 'x-productListItem'):
|
for item in browser.find_elements(By.CLASS_NAME, 'x-productListItem'):
|
||||||
title = item.find_element(CSS, 'div[data-automation="productItemName"]').get_attribute('innerHTML')
|
title = item.find_element(CSS, 'div[data-automation="productItemName"]').get_attribute('innerHTML')
|
||||||
@@ -97,10 +103,30 @@ def parse_page(browser: Chrome):
|
|||||||
|
|
||||||
# Available and meets threshold criteria, notify user
|
# Available and meets threshold criteria, notify user
|
||||||
AVAIL_TABLE[title] = True
|
AVAIL_TABLE[title] = True
|
||||||
TG.send(f'{model[0].upper()} Became Available!\n'
|
msg = TG.send(f'{model[0].upper()} Became Available!\n'
|
||||||
f'\n'
|
f'\n'
|
||||||
f'${price:.0f} | {price_incr * 100:.0f}% Incr | Value: {value:.0f}\n'
|
f'${price:.0f} | {price_incr * 100:.0f}% Incr | Value: {value:.0f}\n'
|
||||||
f'- [{title}]({link})')
|
f'- [{title}]({link})')
|
||||||
|
become_available.append((title, model, link, msg, price, price_incr, value))
|
||||||
|
|
||||||
|
# Notify user
|
||||||
|
for tup in become_available:
|
||||||
|
title, model, link, msg, price, price_incr, value = tup
|
||||||
|
|
||||||
|
# Get availability
|
||||||
|
avail = get_avail_v2(link)
|
||||||
|
|
||||||
|
# Edit message
|
||||||
|
msg.edit_text(f'{model[0].upper()} (${price:.0f} {price_incr * 100:.0f}% {value:.0f}) Became Available!\n'
|
||||||
|
f'\n'
|
||||||
|
f'[{title}]({link})\n'
|
||||||
|
f'{avail_str(avail[:5])}\n',
|
||||||
|
parse_mode='Markdown')
|
||||||
|
|
||||||
|
# Check alert
|
||||||
|
if model[0] in ALERT_MODELS:
|
||||||
|
if sum(a.n for a in avail) >= ALERT_MIN_AVAILABLE:
|
||||||
|
TG.alert()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
Reference in New Issue
Block a user