#!/usr/bin/env python3 import configparser import argparse import requests from sys import exit import logging import coloredlogs import json import re from io import StringIO import getpass import os from zoneinfo import ZoneInfo from datetime import datetime from math import floor from ics import Calendar, Event def getKey(dictionnary, key): try: return dictionnary[key] except: logger.error('Missing key: %s' % key) exit(-1) def main(): logger = logging.getLogger(__name__) coloredlogs.install() parser = argparse.ArgumentParser() parser.add_argument("-l", "--login", dest='login', type=str, required=False, help="Username or login (usually a phone number with international prefix).") parser.add_argument("-C", "--city", dest='city', type=str, required=False, help="City.") parser.add_argument("-c", "--config", dest='configFileName', required=False, default=None, help="Configuration file.") parser.add_argument("-p", "--password", dest='password', nargs='?', required=False, default=None, help="Password.") parser.add_argument("-o", "--output", dest='calendar', required=True, default='cal.ics', help="Output calendar file.") parser.add_argument("-d", "--debug", dest='debug', action='store_true', required=False, help="Activate debug.") args = parser.parse_args() logger.info("Initial arguments: %s" % args) if args.debug: logger.info('Setting logging to debug mode') coloredlogs.set_level(level=logging.DEBUG) if args.configFileName != None: try: configFile = open(args.configFileName, 'r') except Exception as e: logger.info('Impossible to open configuration file. Error: %s' % e) exit(-1) config = configparser.ConfigParser() config.read_file(configFile) sections = config.sections() if 'Login' in sections: options = config.options('Login') if 'login' in options: args.login = config.get('Login','login') if 'password' in options: args.password = config.get('Login','password') logger.info("Final arguments: %s" % args) if args.login == None: logger.info('Login must be provided.') parser.print_help() exit(-1) if args.password == None: args.password = getpass.getpass() # Récupération des cookies de base baseURL = 'https://www.espace-citoyens.net' url = baseURL + '/betton/espace-citoyens' logger.info('Retrieve base site') html = requests.get(url, allow_redirects=False) if html.status_code != 200: logger.info('Impossible to retrieve Web site: %d' % html.status_code) cookies = html.cookies found = False p = re.compile('^.*