2012-06-05 3 views
14

Итак, я использую метод REST для вызова API Google. Мне нужно вставить события в конкретный календарь, у которого есть идентификатор. Это запрос POST Я посылаю:Как правильно использовать функцию Events.Insert API Google Calendar API?

Адрес: https://www.googleapis.com/calendar/v3/calendars/ {calendarID}/События

тела:

Authorization: Bearer {access_token} 
{ 
"end": { 
    "dateTime": "2012-08-30T12:30:00", 
    "timeZone": "America/Chicago" 
}, 
"start": { 
    "dateTime": "2012-08-30T14:00:00", 
    "timeZone": "America/Chicago" 
}, 
"summary": "E E 306", 
"colorId": "9" 
"kind": "calendar#event" 
} 

И это ответ я получаю:

{ 
"error":{ 
    "errors":[ 
    { 
    "domain":"calendar", 
    "reason":"timeRangeEmpty", 
    "message":"The specified time range is empty.", 
    "locationType":"parameter", 
    "location":"timeMax" 
    } 
    ], 
    "code":400, 
    "message":"The specified time range is empty." 
} 
} 

Я не понимаю, что я мог делать неправильно. Я ввел все необходимые данные и задал мне параметр, который даже не существует для событий. Я также не могу найти документацию по этой конкретной проблеме. Кто-нибудь видит то, что мне не хватает?

+0

FYI вы можете отредактировать свой токен доступа и постараться не публиковать его в будущем. Даже если они истекают через час, кто-то может использовать этот токен, чтобы читать и потенциально писать в ваш календарь, пока он все еще действителен. –

+0

К сожалению, это правда. Как долго длится это? – AnonymousJohn

+0

Токены последние час. –

ответ

33

В разгаре заданий этого вопроса, я так сильно сталкиваюсь с пальцами. Думаю, я сделал себе мозговой урон. Как оказалось, причина, по которой я не мог найти документацию по этой проблеме, заключалась в том, насколько эффектно это было глупо.

Причина, по которой это вызывало мне такую ​​смешную ошибку, заключалась в том, что в процессе копирования, которое я делал, чтобы проверить, я перевернул время начала и окончания. Итак, я рассказывал Календари Google, чтобы ввести событие, которое закончилось до его начала, что обычно не заканчивается слишком хорошо.

Короткий рассказ, если вы получаете сообщение об ошибке, ссылаясь на параметр «timeMax» при попытке вставить событие, проверьте время начала и окончания.

+2

имел ту же самую проблему, lol – Jason

+1

Я также сделал аналогичную ошибку. Спасибо за объяснение. –

+1

такая же проблема, lol. спасибо за помощь – Igor

1
{ 
"end": { 
    "dateTime": "2014-04-01T10:00:00-06:00" 
}, 
"start": { 
    "dateTime": "2014-04-02T10:00:00-06:00" 
} 
0

Сравните начало и конец DATETIME, начало всегда меньше, чем конец. Также измените формат dateTime как «2018-03-07T18: 00: 00 + 05: 30».

В IOS, я использую

этот код для формата DATETIME:

let dateTimeFormatter = DateFormatter() 
dateTimeFormatter = Locale(identifier: "en_US_POSIX") 
dateTimeFormatter = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
dateTimeFormatter = TimeZone(secondsFromGMT: 0) 
let dateTimeString = dateTimeFormatter.string(from: YOUR_DATE_TIME) 

этот код формата даты:

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd" 
let dateString = dateFormatter.string(from: YOUR_DATE) 

Одним из ключевых, и это значение достаточно, остальные две клавиши нет необходимости, т. е. у вас есть ключ «dateTime» со значением, тогда нет необходимости в ключах «date» и «timeZone». Если вы хотите установить «timeZone», это необязательно, но достаточно одного из «date» и «dateTime».