You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.5 KiB
101 lines
3.5 KiB
from api import API
|
|
import datetime
|
|
import argparse
|
|
import tzlocal
|
|
from oauth2client import tools
|
|
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
|
|
APPLICATION_NAME = 'Google Calendar API Python'
|
|
|
|
def dateTime(datetime):
|
|
if not datetime.tzinfo:
|
|
datetime = datetime.astimezone()
|
|
zone = tzlocal.get_localzone().zone
|
|
datetime = datetime.isoformat(timespec='seconds')
|
|
return {
|
|
"timeZone":zone,
|
|
"dateTime":datetime,
|
|
}
|
|
|
|
#~~BODY EXAMPLE~~#
|
|
# {'attendees': [{'email': 'lpage@example.com'},
|
|
# {'email': 'sbrin@example.com'}],
|
|
# 'description': "A chance to hear more about Google's developer products.",
|
|
# 'end': {'dateTime': '2015-05-28T17:00:00-07:00',
|
|
# 'timeZone': 'America/Los_Angeles'},
|
|
# 'location': '800 Howard St., San Francisco, CA 94103',
|
|
# 'recurrence': ['RRULE:FREQ=DAILY;COUNT=2'],
|
|
# 'reminders': {'overrides': [{'method': 'email', 'minutes': 1440},
|
|
# {'method': 'popup', 'minutes': 10}],
|
|
# 'useDefault': False},
|
|
# 'start': {'dateTime': '2015-05-28T09:00:00-07:00',
|
|
# 'timeZone': 'America/Los_Angeles'},
|
|
# 'summary': 'Google I/O 2015'}
|
|
|
|
class calendar_api(API):
|
|
def __init__(
|
|
self,
|
|
app_name,
|
|
client_secret_file,
|
|
credentials_dir,
|
|
scopes = 'https://www.googleapis.com/auth/calendar',
|
|
version = 'v3',
|
|
):
|
|
super().__init__('calendar',scopes,app_name,client_secret_file,credentials_dir,version)
|
|
|
|
self.calendars=self.get_calendars()
|
|
self.ids = dict((calendar['summary'].lower(),calendar['id']) for calendar in self.calendars)
|
|
|
|
def create_event(self, calendar_id, body):
|
|
|
|
try:
|
|
calendar_id = self.ids[calendar_id]
|
|
except KeyError:
|
|
pass
|
|
service = self.service
|
|
event = service.events().insert(calendarId=calendar_id, body=body).execute()
|
|
return event['id']
|
|
|
|
def update_event(self,calendar_id, event_id, body):
|
|
try:
|
|
calendar_id = self.ids[calendar_id]
|
|
except KeyError:
|
|
pass
|
|
|
|
service = self.service
|
|
try:
|
|
event = service.events().get(calendarId=calendar_id, eventId=event_id).execute()
|
|
except HttpError as e:
|
|
if e.resp.status==404:
|
|
return self.create_event(calendar_id, body)
|
|
|
|
updated_event = service.events().update(calendarId=calendar_id, eventId=event['id'], body=body).execute()
|
|
return updated_event["id"]
|
|
|
|
def get_calendars(self):
|
|
page_token = None
|
|
cl = []
|
|
first = True
|
|
while page_token or first:
|
|
first = False
|
|
calendar_list = self.service.calendarList().list(pageToken=page_token).execute()
|
|
cl += list(calendar_list_entry for calendar_list_entry in calendar_list['items'])
|
|
page_token = calendar_list.get('nextPageToken')
|
|
return cl
|
|
|
|
def get_events(self,id):
|
|
service = self.service
|
|
try:
|
|
id = self.ids[id]
|
|
except KeyError:
|
|
pass
|
|
page_token = None
|
|
ret = []
|
|
while True:
|
|
events = service.events().list(calendarId=id, pageToken=page_token).execute()
|
|
ret += events['items']
|
|
page_token = events.get('nextPageToken')
|
|
if not page_token:
|
|
break
|
|
return ret
|
|
if __name__ == "__main__":
|
|
my_api = calendar_api(APPLICATION_NAME,r'test\calendar\client_secret.json','test\calendar')
|