Я выполнил шаги, предоставленные Google для реализации push-уведомлений с помощью Drive API.Все идет так, как описано, за исключением того, что я не получаю никаких уведомлений от Google при каждом изменении (перечислены как Шаг 4 ниже).
Ниже приведено краткое описание шагов, которые я выполнил, и результатов на каждом этапе:
Шаг 1 (успех) : убедитесь, что вы являетесь владельцем домена
Я пошел в Консоль поиска по указанию и успешно подтвердил сайт.
Шаг 2 (Успешно) : Зарегистрируйте ваш домен
Я посетил страницу проверки домена и добавилмой домен в консоли API.Консоль Google API обновлена и теперь отображает список с моим нужным доменом.
У меня есть действительный сертификат SSL от GoDaddy для моего домена, и я также проверил его.
Шаг 3 (Успешно)) : Создан мой канал уведомлений
Используя Python SDK, я создал канал и получил ответ от Google.Код Python ниже показывает, как я это сделал.Примечание. Адрес, указанный в моем запросе, предписывает Google отправлять уведомления на мой веб-сайт Flask, который я размещаю в Google App Engine.Я показываю домен как my_domain.com здесь для конфиденциальности, поскольку я нахожусь в процессе открытия сайта.
channel_id = str(uuid.uuid4())
body = {
'kind': 'api#channel',
'id': channel_id,
'type': 'web_hook',
'address': "https://my_domain.com/notifications"
}
try:
start_page_token = service.changes().getStartPageToken().execute().get('startPageToken');
print(service.changes().watch(pageToken=start_page_token, body=body).execute())
except Exception as e:
print('Exception: {}'.format(e))
А вот ответ от Google:
{u'resourceId': u'vTMwJWl7a23Af1LK1TpJZ38eO_0', u'kind': u'api#channel', u'expiration': u'1538433975000', u'id': u'dce14225-95c8-42a7-9945-4fed1604c848', u'resourceUri': u'https://www.googleapis.com/drive/v3/changes?alt=json&includeCorpusRemovals=false&includeRemoved=true&includeTeamDriveItems=false&pageSize=100&pageToken=4919&restrictToMyDrive=false&spaces=drive&supportsTeamDrives=false&alt=json'}
Шаг 4 (Сбой) : обработать уведомление от Google
Я использую веб-сайт Flask в App Engine и создал app.route для получения уведомлений от Google.Я включил код ниже.Я никогда ничего не получаю по этому URL.
@app.route('/notifications')
def notifications():
print('in notifications()')
try:
chan_id = request.args.get('X-Goog-Channel-ID', 'empty')
msg_num = request.args.get('X-Goog-Message-Number', 'empty')
rid = request.args.get('X-Goog-Resource-ID', 'empty')
state = request.args.get('X-Goog-Resource-State', 'empty')
resource_uri = request.args.get('X-Goog-Resource-URI', 'empty')
goog_changed = request.args.get('X-Goog-Changed', 'empty')
goog_chan_exp = request.args.get('X-Goog-Channel-Expiration', 'empty')
goog_chan_token = request.args.get('X-Goog-Channel-Token', 'empty')
print('chan_id: {}'.format(chan_id))
print('msg_num: {}'.format(msg_num))
print('rid: {}'.format(rid))
print('state: {}'.format(state))
print('resource_uri: {}'.format(resource_uri))
print('goog_changed: {}'.format(goog_changed))
print('goog_chan_exp: {}'.format(goog_chan_exp))
print('goog_chan_token: {}'.format(goog_chan_token))
except Exception as e:
print('notifications() exception: {}'.format(e))
print('leaving notifications()')
return jsonify(result='done')