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

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