2013-06-16 23 views
6

Próbuję wykonać prostą kwerendę freebusy w interfejsie API Kalendarza Google. Moja autoryzacja działa poprawnie, może wyświetlać listy kalendarzy użytkowników itp. Kiedy próbuję przesłać zapytanie wolne/zajęte, dostaję błąd 400 (o ile mogę to stwierdzić), a nie szczegóły dotyczące tego, co to jest nie lubi.Google Calendar API 400 error

Dotyczy to zarówno mojego własnego kodu, jak i korzystania z funkcji "Wypróbuj" interfejsu API Kalendarza Google.

Oto moja prośba (utworzone przy użyciu spróbować widget), a odpowiedź: Zapytanie

POST https://www.googleapis.com/calendar/v3/freeBusy?key={YOUR_API_KEY} 

Content-Type: application/json 
Authorization: Bearer ya29.AHES6ZTr-2wksEvp0iGPTnHTirTIItib5WwxmSAySq1ghfI98Cz88kA 
X-JavaScript-User-Agent: Google APIs Explorer 

{ 
    "items": [ 
      { 
       "id": "[my calendar id goes here]@group.calendar.google.com" 
      } 
    ], 
    "timeMin": "2012-01-31T09:00:00", 
    "timeMax": "2012-01-31T10:00:00", 
    "timeZone": "GMT" 
} 

Response 


400 Bad Request 

cache-control: private, max-age=0 
content-encoding: gzip 
content-length: 122 
content-type: application/json; charset=UTF-8 
date: Sun, 16 Jun 2013 13:08:32 GMT 
expires: Sun, 16 Jun 2013 13:08:32 GMT 
server: GSE 

{ 
    "error": { 
    "errors": [ 
      { 
       "domain": "global", 
       "reason": "badRequest", 
       "message": "Bad Request" 
      } 
    ], 
    "code": 400, 
    "message": "Bad Request" 
    } 
} 

myślę, że może to mieć coś wspólnego z obiektami datetime/formatowania? Ale nie mam pojęcia co. Naprawdę doceniam jakąś pomoc; Walczyłem z tym przez tydzień!

+0

używa "' strefa czasowa ":" UTC "' lub usunięcie tego atrybutu zmienić cokolwiek? Czy klucz API w adresie URL jest właściwie? zobacz: http://stackoverflow.com/questions/15926676/google-calendar-api-bad-request-400-event-over-developer-console#comment22712451_15937488 –

+0

Próbowałem już użyć UTC, usuwając właściwość i włączając przesunięcie strefy czasowej w czasie min/maks. Nic z tego niczego nie zmieniło. Odkąd używam eksploratora interfejsów API Google, nie ma sposobu, by uciec przed niczym. – nilatti

Odpowiedz

14

Ok, zorientowałem się, i pozostawiam odpowiedź dla każdego, kto straci nad tym umysł.

Wbrew temu, co dokumentacja Google mówi o format datetime w tym przypadku jedynym formatem mogłem dostać się do pracy, było to:

2008-03-07T17: 06: 02.000Z

więc to YYYY -MM-DDTHH: MM: SS.MMMZ

Z czego pochodzi Z? Nie wiem, ale musi tam być.

+0

Z jest dla "Zulu"? Co. The. Piekło. Ale możesz określić strefę czasową w oddzielnej właściwości, a to działa. – nilatti

+3

Z jest skrótem dla strefy czasowej UTC ([Coordinated Universal Time] (http://en.wikipedia.org/wiki/Coordinated_Universal_Time)). Punkty za twoją wytrwałość. – Bobulous

+0

Podejrzewałem, że jest to bardzo szczegółowe i potwierdziłeś to! Dzięki –

0

Wartość czasu daty powinna być w formacie "TZ" UTC. Prawie wszystkie CRM i publiczny interfejs API akceptują czas w tym formacie. Jeśli skonwertujesz datetime na czas UTC za pomocą głównych funkcji językowych (takich jak C lub Java), zwrócą one instancję typu datetime w formacie RRRR-MM-DDTHH: MM: SS.MMMZ.

+0

Właściwie ten format jest zdefiniowany w standardzie [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601). 'Z' na końcu jest skrótem od' Zulu' i oznacza UTC. –

Powiązane problemy