Files
bibreminder/bibcheck.py
Matthias Bilger 55fa4d7aa8
All checks were successful
continuous-integration/drone/push Build is passing
make configurable
2020-01-03 19:33:53 +01:00

56 lines
2.1 KiB
Python

import bs4
import requests
import configparser
import urllib.parse
import mechanize
import pushover
import datetime
import os
def main():
pushover.init(os.environ['PUSHOVER_KEY'])
if 'HEALTHCHECK_URL' in os.environ:
requests.get(f"{os.environ['HEALTHCHECK_URL']}/start")
allinfo = []
users = list(map(lambda x: x.split(':', 1), os.environ['BIB_USERS'].split(',')))
for user, pwd in users:
allinfo += check(user, pwd)
if 'HEALTHCHECK_URL' in os.environ:
requests.post(f"{os.environ['HEALTHCHECK_URL']}/start", data='\n'.join(allinfo).encode('utf8'))
def check(username, password):
br = mechanize.Browser()
starturl = 'https://ssl.muenchen.de/aDISWeb/app?service=direct/0/Home/$DirectLink&sp=SOPAC'
response = br.open(starturl)
br.follow_link(text_regex=r"Anmelden")
br.select_form('Form0')
br['$Textfield'] = username
br['$Textfield$0'] = password
response = br.submit()
br.follow_link(text_regex=r"Konto")
try:
response = br.follow_link(text_regex=r"Ausleihen? zeigen")
br.select_form('Form0')
response = br.submit(name='textButton$0', label='Alle verlängern')
lentlist = bs4.BeautifulSoup(response.read(), 'html.parser')
table = lentlist.select('table[class="rTable_table"]')[0]
allinfo = []
for entry in table.tbody.select('tr'):
info = list(map(lambda x: str(x.text).strip(), entry.select('td')))
date = datetime.datetime.strptime(info[1], '%d.%m.%Y')
delta = date - datetime.datetime.now()
allinfo.append(str(info))
if delta.days <= 10 or delta.days == 20 or delta.days == 15:
for client in os.environ['PUSHOVER_CLIENTS'].split(','):
pushover.Client(client).send_message('Bitte an {} denken, Abgabe {}'.format(info[3], info[1]), title="Erinnerung")
except (StopIteration, mechanize._mechanize.LinkNotFoundError) as e:
for client in os.environ['PUSHOVER_CLIENTS'].split(','):
pushover.Client(client).send_message(f'nichts ausgeliehen {username}({e})')
return []
return allinfo
if __name__ == "__main__":
main()