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.

85 lines
2.8 KiB

  1. from 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. class calendar_api(API):
  18. def __init__(
  19. self,
  20. app_name,
  21. client_secret_file,
  22. credentials_dir,
  23. scopes = 'https://www.googleapis.com/auth/calendar',
  24. version = 'v3',
  25. ):
  26. super().__init__('calendar',scopes,app_name,client_secret_file,credentials_dir,version)
  27. self.calendars=self.get_calendars()
  28. self.ids = dict((calendar['summary'].lower(),calendar['id']) for calendar in self.calendars)
  29. def create_event(self, calendar_id, body):
  30. try:
  31. calendar_id = self.ids[calendar_id]
  32. except KeyError:
  33. pass
  34. service = self.service
  35. event = service.events().insert(calendarId=calendar_id, body=body).execute()
  36. return event['id']
  37. def update_event(self,calendar_id, event_id, body):
  38. try:
  39. calendar_id = self.ids[calendar_id]
  40. except KeyError:
  41. pass
  42. service = self.service
  43. try:
  44. event = service.events().get(calendarId=calendar_id, eventId=event_id).execute()
  45. except HttpError as e:
  46. if e.resp.status==404:
  47. return self.create_event(calendar_id, body)
  48. updated_event = service.events().update(calendarId=calendar_id, eventId=event['id'], body=body).execute()
  49. return updated_event["id"]
  50. def get_calendars(self):
  51. page_token = None
  52. cl = []
  53. while True:
  54. calendar_list = self.service.calendarList().list(pageToken=page_token).execute()
  55. cl += list(calendar_list_entry for calendar_list_entry in calendar_list['items'])
  56. page_token = calendar_list.get('nextPageToken')
  57. if not page_token:
  58. break
  59. return cl
  60. def get_events(self,id):
  61. service = self.service
  62. try:
  63. id = self.ids[id]
  64. except KeyError:
  65. pass
  66. page_token = None
  67. ret = []
  68. while True:
  69. events = service.events().list(calendarId=id, pageToken=page_token).execute()
  70. ret += events['items']
  71. page_token = events.get('nextPageToken')
  72. if not page_token:
  73. break
  74. return ret
  75. if __name__ == "__main__":
  76. my_api = calendar_api(APPLICATION_NAME,'test\\client_secret.json','test')