Python 3 - Google Drive API:AttributeError:'资源'对象没有属性'孩子'

时间:2018-06-05 17:05:56

标签: python google-api google-drive-api google-api-python-client

我制作了一个命令行文件夹选择器。我希望它列出文件夹中的所有文件。我已经尝试过使用service.children() - 但我无法解决这个问题。 那件事不起作用:

files = service.children().list(folderId=file_id).execute()

以下是代码实例化service对象:

service = build('drive', 'v3', http=creds.authorize(Http()))

代码的其他部分有效,所以我知道该服务正在运行

我知道变量file_id是一个有效的文件夹。 谁知道它可能是谁?

1 个答案:

答案 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()返回属性Resource   realtime()返回实时资源   replies()返回回复资源   revisions()返回修订资源   teamdrives()返回teamdrives资源   new_batch_http_request()根据发现文档创建BatchHttpRequest对象。

然后,您的解决方案是构建Drive REST API的V2版本:

service = build('drive', 'v2', ...)

或继续使用v3并更新您的代码以使用现在所需的files()资源。

您可以请求标识为folderId的文件夹的子项具有正确的参数并调用listlist_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)

参考文献: