stockbot-buyvm/stockbot-buyvm.py

91 lines
2.5 KiB
Python

"""buyvm stock checker"""
import requests
from bs4 import BeautifulSoup
from loguru import logger
from config import DISCORD_WEBHOOK
BASE_URL = 'https://my.frantech.ca/'
URLS = [
'https://my.frantech.ca/cart.php?gid=37', # Las Vegas
'https://my.frantech.ca/cart.php?gid=38', # New York
'https://my.frantech.ca/cart.php?gid=48', # Miami
'https://my.frantech.ca/cart.php?gid=39', # Luxembourg
]
def send_notification(payload):
try:
requests.post(DISCORD_WEBHOOK, json=payload)
except requests.RequestException as e:
logger.error(f'error sending notification: {str(e)}')
def get_url(url):
try:
response = requests.get(url)
response.raise_for_status()
except requests.RequestException as e:
logger.error(f'error fetching {url}: {str(e)}')
return None
return response.text
def get_packages(html):
soup = BeautifulSoup(html, 'html.parser')
packages = []
package_elements = soup.find_all('div', class_='package')
for package_element in package_elements:
package = {}
package_name = package_element.find('h3', class_='package-name').text.strip()
package['name'] = package_name
package_quantity = package_element.find('div', class_='package-qty').text.strip()
package['qty'] = int(package_quantity.split()[0])
order_button = package_element.find('a', class_='btn-primary')
if order_button:
order_url = order_button['href']
package['url'] = BASE_URL + order_url
else:
package['url'] = ''
packages.append(package)
return packages
def main():
logger.info('checking buyvm stocks')
for url in URLS:
html = get_url(url)
if not html:
continue
packages = get_packages(html)
for package in packages:
if package['qty'] > 0:
logger.info(f"{package['name']}: {package['qty']} in stock")
send_notification({
"username": "stockbot-buyvm",
"embeds": [
{
"author": {
"name": "BuyVM",
},
"title": package['name'],
"url": package['url'],
"description": f"{package['qty']} in stock now!"
}
],
"content": "STOCK ALERT"
})
if __name__ == '__main__':
main()