68 lines
2.2 KiB
Python
Executable File
68 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
from appointments.appointments import watch_for_appointments
|
|
import argparse
|
|
import asyncio
|
|
import logging
|
|
import os
|
|
|
|
|
|
logging.basicConfig(
|
|
datefmt='%Y-%m-%d %H:%M:%S',
|
|
format='[%(asctime)s] %(levelname)s: %(message)s',
|
|
level=logging.INFO,
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def ask_question(question: str, instructions: str) -> str:
|
|
print(f"\033[1m{question}\033[0m")
|
|
if instructions:
|
|
print(instructions)
|
|
return input("> \033[0m")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(
|
|
prog='appointments',
|
|
description='Finds Bürgeramt and other office appointments in Berlin',
|
|
epilog='Made with ❤️ in Berlin'
|
|
)
|
|
parser.add_argument(
|
|
'-i', '--id',
|
|
help="A unique ID for your script. Used by the Berlin.de team to identify requests from you.",
|
|
default=os.environ.get('BOOKING_TOOL_ID', '')
|
|
)
|
|
parser.add_argument(
|
|
'-e', '--email',
|
|
help="Your email address. Required by the Berlin.de team.",
|
|
default=os.environ.get('BOOKING_TOOL_EMAIL', None)
|
|
)
|
|
parser.add_argument(
|
|
'-u', '--url',
|
|
help="URL to the service page on Berlin.de. For example, \"https://service.berlin.de/dienstleistung/120686/\"",
|
|
default=os.environ.get('BOOKING_TOOL_URL', None)
|
|
)
|
|
parser.add_argument(
|
|
'-q', '--quiet', action='store_true',
|
|
help="Limit output to essential logging.",
|
|
default=False
|
|
)
|
|
parser.add_argument(
|
|
'-p', '--port', type=int,
|
|
help="Limit output to essential logging.",
|
|
default=os.environ.get('BOOKING_TOOL_PORT', 80)
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
service_page_url = args.url or ask_question(
|
|
"What is URL of the service you want to watch?",
|
|
"This is service.berlin.de page for the service you want an appointment for. For example, \"https://service.berlin.de/dienstleistung/120686/\""
|
|
)
|
|
|
|
email = args.email or ask_question(
|
|
"What is your email address?",
|
|
"It will be included in the requests this script makes. It's required by the Berlin.de appointments team."
|
|
)
|
|
|
|
asyncio.run(watch_for_appointments(service_page_url, email, args.id, args.port, args.quiet))
|