-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCalendarCollector.py
142 lines (116 loc) · 6.36 KB
/
CalendarCollector.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
'''
Classe prise du site de Google et modifiee qui donne les 100 prochains evenements de chaque
calendrier de Pierre.
'''
from __future__ import print_function
import httplib2
import os
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
import datetime
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
class CalendarCollector():
def get_events(self, start_year, start_month, start_day):
'''
Partie qui va cherches tous les evenements et les renvoie au CalendarScreen.
Il y a 5 calendriers a recuperer : Controles, A Rendre, Travail, Divers Lycee, Personnel.
'''
try:
'''
Adresses de chaque calendrier, a donner au module de Google.
'''
controles_calendar_id = "jh1vplv3t8tvg5uecguginu1i0@group.calendar.google.com"
diverslycee_calendar_id = "iim4mi4h2p0sg4q2a63l6naaf0@group.calendar.google.com"
travail_calendar_id = "tj4oifktmlmuc2qbmko318nmk4@group.calendar.google.com"
arendre_calendar_id = "595q34j3kak6jb5nf97h90akko@group.calendar.google.com"
main_calendar_id = "pielaclau@gmail.com"
'''
Initialisation et connexion du module Google Calendar API.
'''
credentials = self.get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('calendar', 'v3', http=http)
'''
Recuperation des evenements, avec mise en format adequat pour CalendarScreen (on recupere tout et range dans des listes)
'''
controles_events = self.get_events_from_calendar(service, controles_calendar_id , start_year, start_month, start_day)
divers_events = self.get_events_from_calendar(service, diverslycee_calendar_id , start_year, start_month, start_day)
travail_events = self.get_events_from_calendar(service, travail_calendar_id , start_year, start_month, start_day)
arendre_events = self.get_events_from_calendar(service, arendre_calendar_id , start_year, start_month, start_day)
main_events = self.get_events_from_calendar(service, main_calendar_id , start_year, start_month, start_day)
return [("CONTROLES", controles_events),
("ARENDRE", arendre_events),
("TRAVAIL", travail_events),
("DIVERS", divers_events),
("MAIN", main_events)]
except:
'''
Si la connexion a echoue, on met des evenements-tests pour combler le vide.
'''
return [("CONTROLES", [[u"PHY CT Em Epp Ec", u"2016-03-25", u"test"], [u"MAT CT Integrales", u"2016-03-29", u""]]),
("ARENDRE", [[u"A rendre", u"2016-04-05", ""], [u"Autre", u"2016-03-23", u""]]),
("TRAVAIL", [[u"Exercices de maths", u"2016-03-10", u""], [u"Physiques exos cordialement", u"2016-03-30", u""],
[u"MAT Ex 2, 3, 4 p540", u"2016-03-29", u"Rendre sur feuille, potentiellement rammasse"], [u"HG Finir croquis", u"2016-03-29", u""]]),
("DIVERS", [[u"Auto Ecole", u"2016-03-08", u""], [u"Journee portes ouvertes lycee", u"2016-03-25", u""]]),
("MAIN", [[u"AUTO ECOLE rdv", u"2016-03-29", u""], [u"Test", u"2016-03-25", u""]])]
def get_events_from_calendar(self, service, ID, start_year, start_month, start_day):
'''
Fonction qui recupere, trie et classe les evenements d'un calendrier donne.
Retourne la liste classee d'evenements, utile pour CalendarScreen.
'''
now = str(start_year) + "-" + str(start_month) + "-" + str(start_day) + "T00:00:00.000000Z" # on ecrit la date dans le format que l'API veut
print(now)
eventsAPI = service.events().list(calendarId = ID, timeMin = now, maxResults = 100, singleEvents = True, orderBy = 'startTime').execute()
return self.parse_events(eventsAPI.get('items', []))
def parse_events(self, events_source):
'''
On a recupere les evenemts, mais nosu n'avons pas besoin de toutes ces informations.
Ici, on met en forme les donnees dans des listes, avec uniquement les infos nécessaires (titre, date, description)
'''
parsed_events = []
for event in events_source:
start = event['start'].get('dateTime', event['start'].get('date'))
try:
description = event["description"]
except:
description = ""
parsed_events.append([event["summary"], start, description])
return parsed_events
'''
Code de Google, repris d'internet
'''
def get_credentials(self):
"""
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.
"""
# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/calendar-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Calendar API Python Quickstart'
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, 'calendar-python-quickstart.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