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.

100 lines
3.5 KiB

  1. from gapi.api import API
  2. import datetime
  3. import argparse
  4. import tzlocal
  5. from oauth2client import tools
  6. flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
  7. APPLICATION_NAME = 'Google Calendar API Python'
  8. def dateTime(datetime):
  9. if not datetime.tzinfo:
  10. datetime = datetime.astimezone()
  11. zone = tzlocal.get_localzone().zone
  12. datetime = datetime.isoformat(timespec='seconds')
  13. return {
  14. "timeZone":zone,
  15. "dateTime":datetime,
  16. }
  17. #~~BODY EXAMPLE~~#
  18. # {'attendees': [{'email': 'lpage@example.com'},
  19. # {'email': 'sbrin@example.com'}],
  20. # 'description': "A chance to hear more about Google's developer products.",
  21. # 'end': {'dateTime': '2015-05-28T17:00:00-07:00',
  22. # 'timeZone': 'America/Los_Angeles'},
  23. # 'location': '800 Howard St., San Francisco, CA 94103',
  24. # 'recurrence': ['RRULE:FREQ=DAILY;COUNT=2'],
  25. # 'reminders': {'overrides': [{'method': 'email', 'minutes': 1440},
  26. # {'method': 'popup', 'minutes': 10}],
  27. # 'useDefault': False},
  28. # 'start': {'dateTime': '2015-05-28T09:00:00-07:00',
  29. # 'timeZone': 'America/Los_Angeles'},
  30. # 'summary': 'Google I/O 2015'}
  31. class calendar_api(API):
  32. def __init__(
  33. self,
  34. app_name,
  35. client_secret_file,
  36. credentials_dir,
  37. scopes = 'https://www.googleapis.com/auth/calendar',
  38. version = 'v3',
  39. ):
  40. super().__init__('calendar',scopes,app_name,client_secret_file,credentials_dir,version)
  41. self.calendars=self.get_calendars()
  42. self.ids = dict((calendar['summary'].lower(),calendar['id']) for calendar in self.calendars)
  43. def create_event(self, calendar_id, body):
  44. try:
  45. calendar_id = self.ids[calendar_id]
  46. except KeyError:
  47. pass
  48. service = self.service
  49. event = service.events().insert(calendarId=calendar_id, body=body).execute()
  50. return event['id']
  51. def update_event(self,calendar_id, event_id, body):
  52. try:
  53. calendar_id = self.ids[calendar_id]
  54. except KeyError:
  55. pass
  56. service = self.service
  57. try:
  58. event = service.events().get(calendarId=calendar_id, eventId=event_id).execute()
  59. except HttpError as e:
  60. if e.resp.status==404:
  61. return self.create_event(calendar_id, body)
  62. updated_event = service.events().update(calendarId=calendar_id, eventId=event['id'], body=body).execute()
  63. return updated_event["id"]
  64. def get_calendars(self):
  65. page_token = None
  66. cl = []
  67. first = True
  68. while page_token or first:
  69. first = False
  70. calendar_list = self.service.calendarList().list(pageToken=page_token).execute()
  71. cl += list(calendar_list_entry for calendar_list_entry in calendar_list['items'])
  72. page_token = calendar_list.get('nextPageToken')
  73. return cl
  74. def get_events(self,id):
  75. service = self.service
  76. try:
  77. id = self.ids[id]
  78. except KeyError:
  79. pass
  80. page_token = None
  81. ret = []
  82. while True:
  83. events = service.events().list(calendarId=id, pageToken=page_token).execute()
  84. ret += events['items']
  85. page_token = events.get('nextPageToken')
  86. if not page_token:
  87. break
  88. return ret
  89. if __name__ == "__main__":
  90. my_api = calendar_api(APPLICATION_NAME,r'..\test\calendar\client_secret.json',r'..\test\calendar')