1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- from __future__ import print_function
- import httplib2
- import os
- from apiclient import discovery
- import oauth2client
- from oauth2client import client
- from oauth2client import tools
- from gmail_msg import *
- from event import *
- from datetime import datetime
- 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-gmail.json
- SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
- CLIENT_SECRET_FILE = 'client_secret.json'
- APPLICATION_NAME = 'Gmail 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-gmail.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 get_list_event_gmail():
- credentials = get_credentials()
- http = credentials.authorize(httplib2.Http())
- service = discovery.build('gmail', 'v1', http=http)
- results = service.users().labels().list(userId='me').execute()
- labels = results.get('labels', [])
- print('Getting mails matching "Rendez-vous" from Gmail...')
- list_event = []
- if not labels:
- print('No labels found.')
- return list_event
- for label in labels:
- if (label['name']=='INBOX'):
- list_msg = ListMessagesMatchingQuery(service,"me", query="Rendez-vous")
- for msg in list_msg:
- msg = GetMessage(service,"me",msg['id'])
- mime_msg = GetMimeMessage(service,"me",msg['id'])
- body = get_message_body(mime_msg)
- try:
- # Parse only messages in the format + not lenient (do not check keywords etc)
- # Rendez-vous
- # le 22/02/2016 11h00
- # à l'université Paris Diderot
- # pour le cours de WDM
- lines = body.replace('\r', '').split('\n')
- if len(lines) >= 4 and lines[0] == 'Rendez-vous':
- date = datetime.strptime(lines[1][3:], '%d/%m/%Y %Hh%M')
- location = lines[2][2:]
- description = lines[3]
- list_event.append(Event('gmail_'+msg['id'], date,location,description))
- except Exception as e:
- raise e
- return list_event
|