как получить подробную информацию о мероприятии из календаря google

Мне удалось получить push-уведомление из календаря Google в мою систему, когда в календаре создается новое событие. push-уведомление не имеет данных в теле POST, а заголовки POST следующие:

[Host] => xxxxxx.xxxx.com
[Content-Type] => application/json; charset=UTF-8
[Accept] => */*
[X-Goog-Channel-ID] => xxxxxxx-xxxxxxxx-8824-f0c2166878be
[X-Goog-Channel-Expiration] => Thu, 04 Dec 2014 04:27:13 GMT
[X-Goog-Resource-State] => exists
[X-Goog-Message-Number] => 11897215
[X-Goog-Resource-ID] => xxxxxxxxxx-xxxx-pSbC27qOUfg
[X-Goog-Resource-URI] => https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?key=AIzaSyC_0nytiZWHfabrpWiExxxxxxxxxxx&alt=json
[Content-Length] => 0
[Connection] => Keep-alive
[Accept-Encoding] => gzip,deflate
[User-Agent] => APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)

где новые сведения о событии, которые были созданы в календаре? как мне их получить?

нет информации в Интернете и нет информации в документации Google (искал несколько часов): https://developers.google.com/google-apps/calendar/v3/push

где подробности события ??

ОБНОВЛЕНИЕ:

Я установил часы в своем календаре, используя этот код:

service = new Google_Service_Calendar($client);         
$channel =  new Google_Service_Calendar_Channel($client);
$uuid = gen_uuid();
$channel->setId($uuid);
$channel->setType('web_hook');
$channel->setExpiration('1919995862000');

global $sugar_config;
$address = $sugar_config['site_url'] . "/index.php?entryPoint=updateFromCal";
$channel->setAddress($address);
$watchEvent = $service->events->watch($bean->google_cal_id_c, $channel);

Это сведения о канале, которые я отправляю в API календаря Google:

[address] => https://mydomainXXXX/index.php?entryPoint=updateFromCal
[expiration] => 1919995862000
[id] => xxxxxxxxxxxxxxx--4558-ac19-b82e0ca32206
[kind] => 
[params] => 
[payload] => 
[resourceId] => 
[resourceUri] => 
[token] => 
[type] => web_hook
[modelData:protected] => Array
    (
    )

[processed:protected] => Array
    (
    )

Я по-прежнему получаю тот же идентификатор ресурса в ответе с каждым новым событием, которое я создаю в календаре! почему я не могу получить идентификатор только что созданного события? что я сделал не так? я смотрю события или каналы?

ответ, который я получаю, по-прежнему тот, что упоминался выше, все время с одним и тем же идентификатором ресурса.


person Rodniko    schedule 04.11.2014    source источник
comment
Должен ли я получать сведения о событии, вызвавшем push-уведомление, в самом push-уведомлении? Если нет, как я могу узнать, какое изменение события вызвало его?   -  person Rodniko    schedule 04.11.2014
comment
@rodnika к сожалению нет. Смотрите мой ответ ниже. Короче говоря, вам нужно выполнить синхронизацию, чтобы получить событие, которое изменилось.   -  person FullStack    schedule 06.04.2015
comment
Возможный дубликат stackoverflow.com/questions/ 18308751 /   -  person FullStack    schedule 06.04.2015


Ответы (3)


Пуш не содержит никаких данных. Это только говорит вам, что что-то изменилось в этом ресурсе. Вам нужно будет сделать запрос списка, чтобы узнать, что это было. Предпочтительно этот запрос списка будет инкрементной синхронизацией. Узнайте, как выполнить синхронизацию здесь: https://developers.google.com/google-apps/calendar/v3/sync

person luc    schedule 08.11.2014
comment
Ты прав. Сначала вы устанавливаете часы, чтобы Google знал, когда отправлять вам push-уведомление при изменении просматриваемого ресурса (developers.google.com/calendar/v3/push). Затем вы выполняете инкрементную синхронизацию, чтобы проверить, КАКИЕ ресурсы были конкретно изменены. - person Edward; 05.10.2018

Вам не хватает инкрементной синхронизации. Из самих создателей немного изменено в соответствии с моими вкусы:

Первое, что нужно сделать приложению, - это получить новую функцию push - это подписаться на интересующий календарь. Когда календарь изменяется, Google уведомляет ваше приложение, и приложение выполняет вызов API для получения обновления.

В качестве примера предположим, что у вас есть календарь [email protected]. Ваше приложение размещено на сервере с доменом my-host.com, и push-уведомления должны доставляться на веб-перехватчик HTTPS https://my-host.com/notification

Каждый раз, когда [email protected] изменяется, сервер Календаря Google запускает обратный вызов веб-перехватчика по адресу https://my-host.com/notification. После получения обратного вызова приложению необходимо выполнить инкрементную синхронизацию.

person FullStack    schedule 06.04.2015

Чтобы получить сведения о мероприятии, вам необходимо выполнить GET запрос, который должен вернуть информацию о ресурсе в виде ответа JSON. Вы можете сделать это, передав идентификатор календаря и идентификатор события (eventId в этом случае должен быть вашим идентификатором ресурса, если ваше уведомление настроено на отслеживание событий).

person Andy    schedule 04.11.2014
comment
Спасибо за ответ, Энди. получаемый мной ресурс всегда имеет один и тот же идентификатор ресурса, независимо от того, какое новое событие я добавляю в календарь. согласно вашему ответу, я вообще не смотрю события, потому что тогда у меня был бы другой идентификатор ресурса с каждым сообщением push-уведомления о новом событии, верно? - person Rodniko; 05.11.2014
comment
Я обновил сообщение, чтобы вы могли видеть код часов. я смотрю каналы или события? если я смотрю события, почему бы мне не использовать новый идентификатор события в качестве идентификатора ресурса? - person Rodniko; 05.11.2014
comment
Вы уверены, что я должен получить идентификатор нового события, добавленного в календарь, в параметре X-Goog-Resource-ID в ответе на push-уведомление? - person Rodniko; 05.11.2014
comment
Я согласен, что документация может быть более понятной, но я считаю, что resourceId не является eventId. Вам нужно попробовать @ luc или мой ответ. - person FullStack; 06.04.2015