123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 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)
|