#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. Вы хотите получить только уведомления или изменения?