Initial commit
This commit is contained in:
88
main.py
Normal file
88
main.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
|
||||
# from playsound import playsound
|
||||
from requests import post
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
wanted_bikes = read_bike_file('wanted_bikes')
|
||||
known_bikes = read_bike_file('known_bikes')
|
||||
|
||||
chrome_options = Options()
|
||||
chrome_options.add_argument("--headless")
|
||||
chrome_options.add_argument("--disable-gpu")
|
||||
driver = webdriver.Chrome(options=chrome_options)
|
||||
driver.get('https://telekom.company-bike.com')
|
||||
pw = driver.find_element_by_id('password')
|
||||
pw.send_keys("#Magenta-only")
|
||||
pw.send_keys(Keys.RETURN)
|
||||
driver.get('https://telekom.company-bike.com/shop?filter=1&type=Pedelec&groups=MTB/Cross&fed=1')
|
||||
|
||||
bikes = driver.find_elements_by_css_selector('div.product-info > h4')
|
||||
bikes.pop()
|
||||
|
||||
print(f'Found {len(bikes)} bikes.')
|
||||
|
||||
check_links = []
|
||||
|
||||
for bike in bikes:
|
||||
if bike.text in known_bikes:
|
||||
if bike.text in wanted_bikes:
|
||||
check_links.append(bike.find_element_by_css_selector('a').get_property('href'))
|
||||
else:
|
||||
print(f'{bike.text} known but not wanted.')
|
||||
else:
|
||||
alert(f'Unknown bike found: {bike.text}!')
|
||||
|
||||
for link in check_links:
|
||||
driver.get(link)
|
||||
name = driver.find_element_by_css_selector('h1.mb-0')
|
||||
print(f'Checking {name.text}:')
|
||||
sizes = driver.find_elements_by_css_selector('div.size-list-wrapper > ul > li > div > div > h3')
|
||||
for size in sizes:
|
||||
if size.text != 'L':
|
||||
print(f'Not caring for size {size.text}.')
|
||||
continue
|
||||
availability = size.find_element_by_xpath('..').find_element_by_css_selector('span').get_attribute("class")
|
||||
availability = re.search(r'ado-(?!light)(\w+)-bulb', availability)
|
||||
if not availability:
|
||||
alert(f'Error in availability check for {name.text} in size {size.text}')
|
||||
continue
|
||||
availability = availability.group(1)
|
||||
print(f'Availability of size {size.text}: {availability}')
|
||||
if availability != 'red':
|
||||
alert(f'We got availability for {name.text} in size {size.text}!')
|
||||
driver.close()
|
||||
|
||||
def read_bike_file(filename):
|
||||
with open(filename, 'r') as bike_file:
|
||||
return bike_file.read().splitlines()
|
||||
|
||||
def alert(text = 'Alarm!'):
|
||||
print(text)
|
||||
url = "https://hass.schnur.cloud/api/services/notify/mobile_app_benes_iphone"
|
||||
headers = {
|
||||
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI3MmQzZjA3YzA3NTg0MWU5YThmNzYxNjg1YzJjYzFmOCIsImlhdCI6MTYzMDQ4MDEyNSwiZXhwIjoxOTQ1ODQwMTI1fQ.DoyyMdjGlzavcLIjWXKk3Oqp1PgQQj0_DrbCzYNsLIE",
|
||||
"content-type": "application/json",
|
||||
}
|
||||
data = f'{{"message": "{text}"}}'
|
||||
post(url, data=data, headers=headers)
|
||||
# playsound('alarm.mp3')
|
||||
|
||||
alert('Starting Telekom Bike Checker...')
|
||||
try:
|
||||
while(True):
|
||||
print(f'{datetime.now().strftime("%X")}: Starting new check.')
|
||||
main()
|
||||
print('Sleeping for 15 minutes...')
|
||||
sleep(60*15)
|
||||
print('Ihr wollt den selben Song nochmal? Okay, hier kommt der selbe Song nochmal!')
|
||||
except:
|
||||
alert(f'Error in Bike Checker! {sys.exc_info()}')
|
||||
Reference in New Issue
Block a user