Skip to content

Instantly share code, notes, and snippets.

@janczizikow
Forked from pbock/buergerbot.rb
Last active August 8, 2021 18:55
Show Gist options
  • Select an option

  • Save janczizikow/203308b9cb5a378cdb65e4206d7857e8 to your computer and use it in GitHub Desktop.

Select an option

Save janczizikow/203308b9cb5a378cdb65e4206d7857e8 to your computer and use it in GitHub Desktop.
Bürgerbot: Refreshes the Berlin Bürgeramt page until an appointment becomes available, then notifies you.
#!/usr/bin/env python3
import os, platform, time, webbrowser
import requests
from bs4 import BeautifulSoup
URL = 'http://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&dienstleister%5B%5D=122210&dienstleister%5B%5D=122217&dienstleister%5B%5D=122219&dienstleister%5B%5D=122227&dienstleister%5B%5D=122231&dienstleister%5B%5D=122238&dienstleister%5B%5D=122243&dienstleister%5B%5D=122252&dienstleister%5B%5D=122260&dienstleister%5B%5D=122262&dienstleister%5B%5D=122254&dienstleister%5B%5D=122271&dienstleister%5B%5D=122273&dienstleister%5B%5D=122277&dienstleister%5B%5D=122280&dienstleister%5B%5D=122282&dienstleister%5B%5D=122284&dienstleister%5B%5D=122291&dienstleister%5B%5D=122285&dienstleister%5B%5D=122286&dienstleister%5B%5D=122296&dienstleister%5B%5D=150230&dienstleister%5B%5D=122301&dienstleister%5B%5D=122297&dienstleister%5B%5D=122294&dienstleister%5B%5D=122312&dienstleister%5B%5D=122314&dienstleister%5B%5D=122304&dienstleister%5B%5D=122311&dienstleister%5B%5D=122309&dienstleister%5B%5D=317869&dienstleister%5B%5D=324433&dienstleister%5B%5D=325341&dienstleister%5B%5D=324434&dienstleister%5B%5D=324435&dienstleister%5B%5D=122281&dienstleister%5B%5D=324414&dienstleister%5B%5D=122283&dienstleister%5B%5D=122279&dienstleister%5B%5D=122276&dienstleister%5B%5D=122274&dienstleister%5B%5D=122267&dienstleister%5B%5D=122246&dienstleister%5B%5D=122251&dienstleister%5B%5D=122257&dienstleister%5B%5D=122208&dienstleister%5B%5D=122226&anliegen%5B%5D=120686&herkunft=%2Fterminvereinbarung%2F'
def notify(message):
title = "Burgerbot"
system = platform.system().lower()
print(message.upper())
if system == "darwin":
os.system(('osascript -e \'Display notification "{}" with title "{}"\'').format(title, message))
elif system == "linux":
os.system('notify-send "{}" "{}"'.format(title, message))
def looking_for_appointment():
try:
print('-' * 80)
print('Trying again')
r = requests.get(URL)
r.raise_for_status()
print('Page loaded')
soup = BeautifulSoup(r.text, 'lxml')
if soup.find(id="captcha_text"):
notify('Got rate limited! Please enter captcha and restart!')
webbrowser.open_new(URL)
return False
if len(soup.find_all('td', 'buchbar')) > 0:
notify('An appointment is available.')
webbrowser.open_new(URL)
return input("Enter y to keep searching or anything else to quit.\n").lower() == 'y'
print('No luck this time.')
return True
except requests.exceptions.RequestException as e:
notify('Error encountered.')
raise SystemExit(e)
while looking_for_appointment():
print('Sleeping.')
time.sleep(30)
beautifulsoup4==4.9.3
certifi==2021.5.30
charset-normalizer==2.0.4
idna==3.2
lxml==4.6.3
requests==2.26.0
soupsieve==2.2.1
urllib3==1.26.6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment