问题描述
我认识的人想要一个程序,列出某个文件夹中文件的所有谷歌驱动器 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 的逻辑?
1楼
我不使用 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! 在的底部,你可以测试各种东西。
祝你好运
2楼
我有同样的问题,即使我将 maxResults 设置为 1000,我仍然收到 460 个结果......
根据文档:“maxResults:要返回的最大文件数。可接受的值为 0 到 1000,包括在内。(默认值:100)”