2016-04-12 5 views
1

Я выполняю некоторые функции Google Calendar api. У меня есть пользовательский календарь, который имеет возможность синхронизации с календарем Google. Это означает, что вы можете создавать и редактировать календари и события из моей панели управления в учетную запись календаря Google. Основная проблема, с которой я столкнулся, заключается в том, что я обновляю событие непосредственно из своего календаря Google. Я внедрил push-уведомления и получил ответ вроде этого:Обновление базы данных при изменении Календаря Google

{ 
     "Google_channel_ID": "19835150 - 0057 - 11e6 - bc9c - 1735798 ca540", 
     "Google_channel_token": "calendar_id = 4e7 d5c20ht9lpfdtuukcsvgeq4 @group.calendar.google.com & user_id = 43e d7rxeqqce3fk09ahszc", 
     "Google_channel_expiration": "Tue,12 Apr 2016 12: 34: 36 GMT", 
     "Google_resource_id": "oLMEEhHAw5Xo3r2187CWykjAtm0", 
     "Google_resource_URI": "https: //www.googleapis.com/calendar/v3/calendars/[email protected]/events?alt=json", 
     "Google_resource_state": "sync", 
     "Google_message_number": "1" 
    } 

Но этот ответ очень общий. Например, если у меня есть 1000 событий в этом календаре и обновите все 1000 событий. Я получаю всегда одно и то же уведомление 1000. Я хотел бы знать, если возможно получить, какой идентификатор события изменился, поэтому я могу выполнить и обновить свою БД.

Как я инициализировать часы, как это:

exports.watch = function(req, res){ 
     var channel_id  = uuid.v1(); 
     var user_id  = req.body.user_id; 
     var calendar_id  = req.body.calendar_id; 

     authorize(user_id, function(oauth2Client){ 
      var data = { 
      auth: oauth2Client, 
      calendarId: calendar_id, 
      resource: { 
       id: channel_id, 
       token: 'calendar_id='+ calendar_id + '&user_id=' + user_id, 
       address: 'https://api.medradr.com/google-watch', 
       type: 'web_hook', 
       params: { 
        ttl: '36000' 
      } 
     } 
     }; 
     calendar.events.watch(data, function (err, response) { 
      if (err) { 
       console.error('The API returned an error: ' + err); 
       return; 
      }else{ 
       res.send({ok: true, message: 'Listener created', result:response}); 
      } 
     }); 
    }); 
    } 
+0

Duplicate. На этот вопрос был дан ответ [http://stackoverflow.com/questions/18206024/update-database-if-change-in-google-calendar-event). – noogui

+0

На эту нить не отвечает. Если вы прочитаете мой первый вопрос, вы увидите, что у меня были настроенные push-уведомления, и я получал push-уведомления каждый раз, когда что-то происходит в этом календаре. Реальный вопрос: насколько изменились события, вызванные триггерами push-уведомлений? Я уже нашел решение и разместил здесь ответ. –

ответ

4

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

X-Goog-Channel-ID: channel-ID-value 
    X-Goog-Channel-Token: channel-token-value 
    X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format; present only if channel expires. 
    X-Goog-Resource-ID: identifier-for-the-watched-resource 
    X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource 
    X-Goog-Resource-State: sync 
    X-Goog-Message-Number: 1 

На X-GOOG-Ресурс-URI вы получите что-то вроде этого:

https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?alt=json 

С вами OAuth аутентификации, вы можете сделать запрос GET на этот URL-адрес, чтобы получить все события, принадлежащие этому календарю. Теперь трюк, чтобы узнать, какие ресурсы были изменены, действительно прост. Для каждого события вы получите что-то вроде этого:

 { 
      event_id: 335, 
      user_id: '43ed7rxeqqce3fk09ahszc', 
      kind: 'calendar#event', 
      etag: '"2921213870180000"', 
      google_id: 'cpbcesg966skprb3rh1p1ud668', 
      status: 'confirmed', 
      htmlLink: 'https://www.google.com/calendar/event?eid=Y3BiY2VzZzk2NnNrcHJiM3JoMXAxdWQ2NjggNGU3ZDVjMjBodDlscGZkdHV1a2NzdmdlcTRAZw', 
      created: Thu Apr 14 2016 00:00:00 GMT-0500 (CDT), 
      updated: Thu Apr 14 2016 00:00:00 GMT-0500 (CDT), 
      summary: 'Testing google notifications', 
      description: '', 
      creator: '[email protected]', 
      organizer: '[email protected]', 
      start: Sat Apr 09 2016 00:00:00 GMT-0500 (CDT), 
      end: Sun Apr 10 2016 00:00:00 GMT-0500 (CDT), 
      iCalUID: '[email protected]', 
      event_type_id: 0, 
      calendar_id: 0, 
      timezone_id: 0, 
      sequence: 0, 
      calendar_color_id: '' 
    } 

Как вы можете видеть, это последовательность: 0, это постепенно. Это означает, что каждый раз, когда вы применяете некоторые изменения в своем мероприятии (сводка, описание, дата начала, дата окончания и т. Д.). Это число будет увеличено на +1. Вы можете сохранить это в своей базе данных, поэтому при каждом запуске веб-крючка вы обновляете только события, последовательность которых>, чем сохраненная последовательность. Таким образом, вы обновляете событие и сохраняете новое значение последовательности. В следующий раз, когда запускается веб-крючок, он только обновит на вашем БД события, которые включены в это условие.

Надеюсь, это поможет, счастливое кодирование.

Смежные вопросы