J'ai cherché sur le Web la solution mais il semble que je sois la seule à ne pas avoir pu résoudre ce problème.La bibliothèque cliente Python pour l'API Google Calendar v3 insère l'événement "Missing fin time" erreur
Donc, c'est ce que mon code python ressemble:
class ReminderDate(object):
def __init__(self, datetimestring, timezone="Australia/Sydney"):
self.dateTime = datetimestring
self.timeZone = timezone
class ReminderFormat(object):
def __init__(self, useDefault=False):
self.useDefault = useDefault
self.overrides = [{"method":"email", "minutes":15}]
class ReminderData(object):
def __init__(self, reminder, datefrom=None, dateto=None, datevalue=None):
self.summary = reminder
self.start = ReminderDate(datefrom)
self.end = ReminderDate(dateto)
self.reminders = ReminderFormat()
def save_event_to_google_calendar(self, reminder_data):
credentials = self.get_credentials()
service = build('calendar', 'v3', http=credentials.authorize(Http()))
event = json.dumps(reminder_data, default=lambda o: o.__dict__)
print (event)
created_event = service.events().insert(calendarId=CALENDAR_ID, body=str(event), sendNotifications=True).execute()
pp.pprint(created_event)
Et il produit donc l'impression (événement) produit un JSON comme ci-dessous:
{"start": {"timeZone": "Australia/Sydney",
"dateTime": "2015-04-26T18:45:00+10:00"},
"end": {"timeZone": "Australia/Sydney",
"dateTime": "2015-04-26T19:00:00.000+10:00"},
"reminders": {"overrides": [{"minutes": 15, "method": "email"}],
"useDefault": false},
"summary": "do grocery shopping"}
et je reçois l'erreur suivante:
File "/usr/local/lib/python2.7/dist-packages/googleapiclient/http.py", line 729, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError:
<HttpError 400 when requesting https://www.googleapis.com/calendar/v3/calendars/myemail%40gmail.com/events?alt=json&sendNotifications=true
returned "Missing end time.">
Je ne comprends pas. J'ai la "fin" du temps dans le json. Alors qu'est-ce qui me manque ici?
J'ai essayé d'afficher le même fichier json via la console de développeur google https://developers.google.com/google-apps/calendar/v3/reference/events/insert et cela fonctionne. mais il échoue à la bibliothèque client Python :((décrit ci-dessus)
[EDIT] Solution trouvée
La question était que j'avais converti objet Python à JSON "string" et c'est ce que J'approvisionnait par opposition à JSON « objet » attendu par l'API c'est donc le bon code.
json_event = json.loads(event)
created_event = service.events().insert(calendarId=CALENDAR_ID, body=json_event, sendNotifications=True).execute()
Etes-vous sûr de passer un 'timeZone'? Il n'y a pas une telle valeur dans l'exemple d'API. – soon
J'ai essayé les deux (avec et sans timeZone) .. le résultat était le même. En outre, même si l'exemple ne montre pas qu'il est dans l'API en tant que propriété facultative. –