initial commit

This commit is contained in:
2023-02-18 07:39:08 +01:00
commit e63ab7b77e
63 changed files with 7122 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
import contextlib
import datetime
import locale
import httpx
from bs4 import BeautifulSoup
import berlin
http = httpx.Client(
headers={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
},
follow_redirects=True,
)
@contextlib.contextmanager
def override_locale(category: int, val: str) -> None:
prev = locale.getlocale(category)
locale.setlocale(category, val)
yield
locale.setlocale(category, prev)
def get_available_slots():
res = http.get('https://service.berlin.de/dienstleistung/120686/')
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
link = soup.select_one('[role="complementary"] .zmstermin-multi a')
calendar_url = link.attrs['href']
try:
# redirect fails, we just need the cookies
_ = http.get(calendar_url)
except:
pass
res = http.get('https://service.berlin.de/terminvereinbarung/termin/day/')
res.raise_for_status()
return extract_days(res.text)
def extract_days(html: str) -> list[datetime.date]:
soup = BeautifulSoup(html, 'html.parser')
found = []
for it in soup.select('.calendar-month-table .buchbar'):
month_year = it.find_parent(attrs={'class': 'calendar-month-table'}).select_one('thead .month').text.strip()
day = it.text.strip()
found.append(f'{day} {month_year}')
with override_locale(locale.LC_TIME, 'de_DE'):
days = [datetime.datetime.strptime(it, '%d %B %Y').date() for it in found]
return days
def main():
days = get_available_slots()
good_days = [it for it in days if it < datetime.date(2023, 1, 27)]
if not good_days:
print('no slots')
return
print('found slots')
berlin.book_slot()
for it in days:
print(it)
if __name__ == '__main__':
main()