我制作了一个命令行文件夹选择器。我希望它列出文件夹中的所有文件。我已经尝试过使用service.children() - 但我无法解决这个问题。 那件事不起作用:
files = service.children().list(folderId=file_id).execute()
以下是代码实例化service
对象:
service = build('drive', 'v3', http=creds.authorize(Http()))
代码的其他部分有效,所以我知道该服务正在运行
我知道变量file_id
是一个有效的文件夹。
谁知道它可能是谁?
答案 0 :(得分:3)
您最近将API版本从2升级到3!根据{{3}},不再有children()
个资源。我怀疑你还有其他的改变,所以一定要查看更改日志。
通过Drive API changelog的Python客户端库文档提供的一些有用信息:
about()
返回about资源changes()
返回更改资源channels()
返回渠道资源comments()
返回评论资源files()
返回文件资源permissions()
返回权限资源replies()
返回回复资源revisions()
返回修订资源teamdrives()
返回teamdrives资源new_batch_http_request()
根据发现文档创建BatchHttpRequest
对象。
如果您不想迁移,Drive V3仍然有children()
个资源:
about()
返回about资源apps()
返回应用资源。
changes()
返回更改资源channels()
返回渠道资源children()
返回子资源comments()
返回评论资源files()
返回文件资源parents()
返回父资源permissions()
返回权限资源properties()
返回属性Resourcerealtime()
返回实时资源replies()
返回回复资源revisions()
返回修订资源teamdrives()
返回teamdrives资源new_batch_http_request()
根据发现文档创建BatchHttpRequest
对象。
然后,您的解决方案是构建Drive REST API的V2版本:
service = build('drive', 'v2', ...)
或继续使用v3
并更新您的代码以使用现在所需的files()
资源。
您可以请求标识为folderId
的文件夹的子项具有正确的参数并调用list
和list_next
:
Python3代码:
kwargs = {
"q": "{} in parents".format(folderId),
# Specify what you want in the response as a best practice. This string
# will only get the files' ids, names, and the ids of any folders that they are in
"fields": "nextPageToken,incompleteSearch,files(id,parents,name)",
# Add any other arguments to pass to list()
}
request = service.files().list(**kwargs)
while request is not None:
response = request.execute()
# Do stuff with response['files']
request = service.files().list_next(request, response)
参考文献: