Google Drive API使用PageToken返回400错误请求

纳塔塔瓦·纳夫拉卡(Nautatava Navlakha)

我正在尝试访问Google Drive API v3中的下一页文件。但是这个特定的片段失败了。

我签出了https://stackoverflow.com/a/38479234/11705040,query_string="'{0}' in parents".format(item["id"])此帖子对我的查询似乎还不错。

temp = (
       self.service.files().list(
           q=query_string,
           pageToken=nextPageToken,
           pageSize=5,
           fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)",
       ).execute()
   )

错误是这样的:

File "D:\Mac\Sites\project-reconnaissance\cronjob\env\lib\site-packages\googleapiclient\_helpers.py", line 134, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "D:\Mac\Sites\project-reconnaissance\cronjob\env\lib\site-packages\googleapiclient\http.py", line 907, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/drive/v3/files?q=%271a49i6ivoZ_ErAin7KvvG9VBZOyeeImqc%27+in+parents&pageToken=~%21%21~AI9FV7TwnBwo_MYMR8Rap94OgbFCPDWcy3n6C7prOb_V7MjhT6tjVHHP58QBSyROFNI4HtgmMW6o1AznGcmN1yF_wKr5SSlSgiDocew78RYuyZXDdGO6WOnhrkNeuYW3RyD1nSSWKXNro-skWfZgMuKpQ9P1QfnAxQbdiXAVQ8lO6J2b_xzwpMhAjLWV1kOMCsTqVP9wI61SYJGa1qRJwhUzwL6OEaqffuhXaH3Aa6aXUWg6aIwzAYqGuwTDu1S9BIAqSE3qXDKpRebmvC-fXz0iiDlqlPsuJA-MWuzSNIk0_XlgRpRavrGN9c5miN32i9JML6VQNKs9c_mdb3Ggwzm8KUlPO8eeYg8rdM9gwg6asch22HjLNeKc5kqIRjG9OjVA0RVovpvE&pageSize=5&fields=nextPageToken%2C+files%28id%2C+name%2C+mimeType%2C+size%2C+parents%2C+modifiedTime%29&alt=json returned "Invalid Value">

编辑添加一个最小的可复制示例:当我尝试在子文件夹中运行查询时,会遇到此问题

import os
import pickle
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

ID = "1a49i6ivoZ_ErAin7KvvG9VBZOyeeImqc"

SCOPES = ["https://www.googleapis.com/auth/drive.readonly"]


def get_gdrive_service():
    """Gets the service object of google drive"""
    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(port=0)
        # Save the credentials for the next run
        with open("token.pickle", "wb") as token:
            pickle.dump(creds, token)
    # return Google Drive API service
    return build("drive", "v3", credentials=creds)


print("connecting to google drive...")
service = get_gdrive_service()
print("connected to google drive!")


def list_files(query_string, nextPageToken=None):
    """List the google drive files as returned by Google Drive API."""

    # Get the first set of results
    # BUG here when coming from line 68
    items = (
        service.files().list(
            q=query_string,
            pageToken=nextPageToken,
            pageSize=5,
            fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)",
        )
        .execute()
    )

    if items['files'] != []:
        print("get first set of results", items)

    nextPageToken = items.get("nextPageToken")
    items = items.get("files", [])

    # Do this for all internal folders as well
    for item in items:
        print("Doing item:", item["name"])
        # This works fine
        list_files(
            query_string="'{0}' in parents".format(item["id"])
        )

    # If there is a nextPage Token, go further to get next set of items
    if nextPageToken:
        print("Fetching next set of results")
        q = "'{0}' in parents".format(ID)
        # SOME BUG in line 50 when going from here, fails with HTTP 400
        list_files(q, nextPageToken=nextPageToken)


list_files("'{0}' in parents".format(ID))
用户名

我得到了同样的东西。问题是查询根本无法更改。因此,请添加下一页令牌,但否则,您需要按照生成令牌时的原样发送其他所有邮件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google Drive API watch 400错误Ruby on Rails

来自分类Dev

Google Drive API推送通知订阅400“解析错误”

来自分类Dev

使用Google Drive API SDK从Google Drive删除文件

来自分类Dev

使用Google Drive API从Google Drive直接下载

来自分类Dev

使用Google Drive API在指定的Google Drive中上传文件

来自分类Dev

授权错误Google Drive Android

来自分类Dev

Google Drive API附加文件?

来自分类Dev

Google Drive API,元数据

来自分类Dev

Google Drive API清单权限

来自分类Dev

从Google Drive API下载图像

来自分类Dev

Google Drive REST API的问题

来自分类Dev

Google Drive api 权限限制

来自分类Dev

Google Drive API:如何从Google Drive下载文件?

来自分类Dev

使用 Google Drive REST API 创建文件访问请求

来自分类Dev

找不到文件错误Google Drive API

来自分类Dev

错误的Google Drive Insert API:操作超时

来自分类Dev

使用Drive API将图片上传到Google Drive

来自分类Dev

使用Google Drive API上载G-Drive面临的问题

来自分类Dev

禁止使用Google Drive API 403

来自分类Dev

将Google Drive API与Laravel结合使用

来自分类Dev

使用Google Drive REST API的日期格式

来自分类Dev

如何为python使用Google Drive API?

来自分类Dev

禁止使用Google Drive API 403

来自分类Dev

将Google Drive API与Laravel结合使用

来自分类Dev

在Google Drive API中使用FullText字段

来自分类Dev

使用Google Drive API获取文件大小

来自分类Dev

Google drive api - com.google.api.services.drive.Drive.files() - None of the File objects have permissions?

来自分类Dev

Google Proximity API在pageToken查询上返回500内部错误

来自分类Dev

Google Drive Realtime项目instancei.drive.realtime.CollaborativeList错误

Related 相关文章

热门标签

归档