Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google drive api 如何使用watch订阅Google Drive上的更改_Google Drive Api_Google Docs Api - Fatal编程技术网

Google drive api 如何使用watch订阅Google Drive上的更改

Google drive api 如何使用watch订阅Google Drive上的更改,google-drive-api,google-docs-api,Google Drive Api,Google Docs Api,我一直在尝试订阅google drive文件夹上的更改。我的python3代码如下: 作用域=“” store=file.Storage('Storage.json') 但这会抛出错误 googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/drive/v3/changes/watch?pageToken=163958&alt=json returned

我一直在尝试订阅google drive文件夹上的更改。我的python3代码如下: 作用域=“” store=file.Storage('Storage.json')

但这会抛出错误

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/drive/v3/changes/watch?pageToken=163958&alt=json returned "entity.resource">
googleapiclient.errors.HttpError:

我不能完全理解。我确信我的问题是不理解文档(即,我不知道params是否与此请求的正文相对,并且找不到任何代码示例),但是如果您能提供任何帮助,我将不胜感激

如果有人在这里闲逛,我会把我找到的答案贴到自己的问题上:

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive']


def auth():

    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
    return creds


def subscribe_changes(service):
    channel_id = str(uuid.uuid4())
    body = {
        "id": channel_id,
        "type": "web_hook",
        "address": COOL_REGISTERED_DOMAIN
    }
    response = service.changes().watch(body=body, pageToken = get_page_token(service)).execute()
    ts = response['expiration']
    print(dateparser.parse(ts))
    print(response)
    return channel_id


def main():
    creds = auth()
    service = build('drive', 'v3', credentials=creds)
    subscribe_changes(service)


如果您的令牌遇到错误状态代码400,您可以使用
POST来检查参数和令牌使用是否正确https://www.googleapis.com/drive/v3/files/fileId/watch
。它还说,你必须首先在谷歌API控制台;我仍然不明白如何将其转化为这个错误。我使用的是一个页面标记,正如我的回答所指出的,是
alt=json返回的“entity.resource”
让我感到困惑。我的域名已注册。
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive']


def auth():

    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
    return creds


def subscribe_changes(service):
    channel_id = str(uuid.uuid4())
    body = {
        "id": channel_id,
        "type": "web_hook",
        "address": COOL_REGISTERED_DOMAIN
    }
    response = service.changes().watch(body=body, pageToken = get_page_token(service)).execute()
    ts = response['expiration']
    print(dateparser.parse(ts))
    print(response)
    return channel_id


def main():
    creds = auth()
    service = build('drive', 'v3', credentials=creds)
    subscribe_changes(service)