Webhook для отслеживания изменений на Google Диске

#python #flask #google-drive-api #webhooks #ngrok

#python #flask #google-drive-api #webhooks #ngrok

Вопрос:

Я пытаюсь создать webhook для отслеживания множества файлов на GDrive, чтобы получить следующую информацию: кто и когда изменил файл. Итак, используя это руководство, я создал сервер python, который прослушивает webhooks, и предоставил его через службу NGROK.

 from flask import json
from flask import request
import requests
from flask import Flask, request, url_for, redirect, render_template

app = Flask(__name__)

@app.route('/')
def api_root():
    return "WEBHOOK"

@app.route('/*MyHtmlVerificationFile*')
def admin():
    return render_template('*MyHtmlVerificationFile*')

@app.route('/notif', methods=['POST'])
def api_gd_message():
    data = request.get_data()
    header = request.headers
    print(data)
    print(header)
    return ''

if __name__ == '__main__':
    app.run(debug=True)
 

Затем, в соответствии с этим примером, я подтвердил право собственности на домен URL и зарегистрировал его, получил учетные данные и написал скрипт для отслеживания изменений.

 from oauth2client.service_account import ServiceAccountCredentials
from oauth2client.client import OAuth2Credentials
from pygdrive3 import service
import uuid
import requests
import json

channel_id = str(uuid.uuid4())
JSON_KEY_FILE = "creds.json"
SCOPES = ['https://www.googleapis.com/auth/drive.file',
         'https://www.googleapis.com/auth/drive.readonly',
         'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, SCOPES)
access_token_info = credentials.get_access_token()

token = access_token_info.access_token

header = {
    'Authorization': f'Bearer '   token,
    'Content-Type': 'application/json',
}

body = {
    "id": channel_id,
    "type": "web_hook",
    "address": "https://*MyDomain*/notif"
}

r = requests.post(url='https://www.googleapis.com/drive/v3/changes/watch?pageToken=101',
                  data=json.dumps(body), headers=header)

print(r.content)

 

Какой результат:

 b'{n 
"kind": "api#channel",n 
"id": "MyId",n 
"resourceId": "*MyResourceId*",n 
"resourceUri": "*MyRsourceUri*",n 
"expiration": "1612820606000"n
}n'

Process finished with exit code 0
 

И при запуске Webhook появляется сообщение сервера.

 127.0.0.1 - - [08/Feb/2021 21:43:20] "POST /notif HTTP/1.1" 200 -
b''
Host: *MyDomain*
User-Agent: APIs-Google; ( https://developers.google.com/webmasters/APIs-Google.html)
Content-Length: 0
Accept: */*
Accept-Encoding: gzip,deflate,br
X-Forwarded-For: 66.249.88.84
X-Forwarded-Proto: https
X-Goog-Channel-Expiration: Mon, 08 Feb 2021 21:43:26 GMT
X-Goog-Channel-Id: *MyChannelId*
X-Goog-Message-Number: 1
X-Goog-Resource-Id: *MyResourcelId*
X-Goog-Resource-State: sync
X-Goog-Resource-Uri: *MyResourcelUri*

 

Проблема в том, что нет сообщений, когда я что-то делаю (редактирую, удаляю, переименовываю и т. Д.) С файлами на Gdrive.

Комментарии:

1. Возможно, вы захотите проверить здесь , какие события на самом деле запускают push-уведомления. Вы пробовали перезапустить свой сервер?

2. Да, я пробовал это, но уведомлений по-прежнему нет

3. Вы хотите получить только уведомления или изменения?