当前位置: 代码迷 >> python >> Google Drive API 的限制
  详细解决方案

Google Drive API 的限制

热度:48   发布时间:2023-06-16 10:27:00.0

我认识的人想要一个程序,列出某个文件夹中文件的所有谷歌驱动器 ID。 所以我查看了 google 网站,了解了一些如何在 python 中进行操作并提出了一个程序。 问题是似乎有一个限制,但我不太明白:

如果我使用此代码:

credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v2', http=http)

par = {'maxResults':1000}
results = service.files().list(**par).execute()
items = results.get('items', [])
folders = {}
if not items:
    print('No files found.')
else:
    print("There is "+str(len(items))+" items")

我在谷歌开发者网站的样本上get_credentials() ,问题是我确定我正在访问的驱动器有 1000 多个文件,但程序仍然告诉我There is 460 items ,有没有方式这是它限制为 460 的逻辑?

我不使用 Python,但我认为您缺少“nextPage”逻辑。 看,(至少在 Java 中)列表一次返回一个“页面”结果,因此必须有另一个循环来检索下一页(只要有一个可用),例如:

  void list(String prnId) {
      String qryClause = "'me' in owners and '" + prnId + "' in parents";
      Drive.Files.List qry = mGOOSvc.files().list()
          .setQ("'me' in owners and '" + prnId + "' in parents")
          .setFields("items, nextPageToken");
      String npTok = null;
      do {
        FileList gLst = qry.execute();
        if (gLst != null) {
          // BINGO - file list, but only one page worth
          npTok = gLst.getNextPageToken();  //GET POINTER TO THE NEXT PAGE
          qry.setPageToken(npTok);
        }
      } while (npTok != null && npTok.length() > 0);
  }

看到“ do while() ”循环和“ BINGO ”注释了吗? 尝试将它实现到您的 PY 代码中(不要忘记要求 'nextPageToken' 来获取它)。

此外,还有一个很棒的工具, TryIt! 在的底部,你可以测试各种东西。

祝你好运

我有同样的问题,即使我将 maxResults 设置为 1000,我仍然收到 460 个结果......

根据文档:“maxResults:要返回的最大文件数。可接受的值为 0 到 1000,包括在内。(默认值:100)”

  相关解决方案