from __future__ import print_function import httplib2 import os from apiclient import discovery import oauth2client from oauth2client import client from oauth2client import tools from event import Event from datetime import datetime import pytz utc=pytz.UTC try: import argparse flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() except ImportError: flags = None # If modifying these scopes, delete your previously saved credentials # at ~/.credentials/projet-wdm-gcal.json SCOPES = 'https://www.googleapis.com/auth/calendar.readonly' CLIENT_SECRET_FILE = 'client_secret.json' APPLICATION_NAME = 'Google Calendar API Python' def get_credentials(): """Gets valid user credentials from storage. If nothing has been stored, or if the stored credentials are invalid, the OAuth2 flow is completed to obtain the new credentials. Returns: Credentials, the obtained credential. """ home_dir = os.path.expanduser('~') credential_dir = os.path.join(home_dir, '.credentials') if not os.path.exists(credential_dir): os.makedirs(credential_dir) credential_path = os.path.join(credential_dir, 'projet-wdm-gcal.json') store = oauth2client.file.Storage(credential_path) credentials = store.get() if not credentials or credentials.invalid: flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) flow.user_agent = APPLICATION_NAME if flags: credentials = tools.run_flow(flow, store, flags) else: # Needed only for compatibility with Python 2.6 credentials = tools.run(flow, store) print('Storing credentials to ' + credential_path) return credentials def find_list_event_gcal(events): list_event = [] if not events: print('No upcoming events found.') return list_event for event in events: if 'dateTime' in event['start']: # replace last ':' by '' start = event['start']['dateTime'] start = start.rsplit(':', 1) start = "".join(start) date = datetime.strptime(start, '%Y-%m-%dT%H:%M:%S%z') else: # TODO strptime, quel est le format dans ce cas ? date = event['start']['date'] date = date.replace(tzinfo = None) location = event.get('location', b'') if (not isinstance(location,str)): location = location.decode() description = event.get('description', 'no description') if (not isinstance(description,str)): description = description.decode() list_event.append(Event('gcal_' + event['id'], date, location, description)) return list_event def get_list_event_gcal(): """Shows basic usage of the Google Calendar API. Creates a Google Calendar API service object and outputs a list of the next 10 events on the user's calendar. """ credentials = get_credentials() http = credentials.authorize(httplib2.Http()) service = discovery.build('calendar', 'v3', http=http) now = datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time print('Getting the upcoming 10 events from Google Calendar...') eventsResult = service.events().list( calendarId='primary', timeMin=now, maxResults=10, singleEvents=True, orderBy='startTime').execute() events = eventsResult.get('items', []) return find_list_event_gcal(events)