Python 3 - API Google Диска: AttributeError: у объекта 'Resource' нет атрибута 'children' - PullRequest
0 голосов
/ 05 июня 2018

Я сделал селектор папок командной строки.Я хочу, чтобы список всех файлов в папке.Я пытался с помощью service.children () - вещь, но я не могу заставить это работать.То, что не работает:

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

Вот код экземпляра service объекта:

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

Другие части кода работают, поэтому я знаю, что сервисработает

Я знаю, что переменная file_id является допустимой папкой.Кто-то, кто знает, что это может быть?

1 Ответ

0 голосов
/ 05 июня 2018

Кажется, вы недавно обновили версию API с 2 до 3!Согласно журналу изменений Drive API , ресурса children() больше нет.Я подозреваю, что есть другие изменения, которые вы не ожидаете, поэтому обязательно просмотрите этот список изменений.

Некоторая полезная информация в документации по клиентской библиотеке Python для Диск V3 :

about() Возвращает ресурс about.
changes() Возвращает ресурс изменений.
channels() Возвращает ресурс каналов.
comments() Возвращает ресурс комментариев.
files() Возвращает ресурс файлов.
permissions() Возвращает ресурс разрешений.
replies() Возвращает ресурс ответов.
revisions() Возвращает ресурс редакций.
teamdrives() Возвращает ресурс teamdrives.
new_batch_http_request() Создание объекта BatchHttpRequest на основе документа обнаружения.

Если вы не хотите выполнять миграцию, для Drive V2 все еще есть ресурс children():

about() Возвращает ресурс about.
apps() Возвращает ресурс приложений.
changes() Возвращает ресурс изменений.
channels() ВозвращаетРесурс каналов.
children() Возвращает дочерний ресурс.
comments() Возвращает ресурс комментариев.
files() Возвращает ресурс файлов.
parents() Возвращает ресурс родителей.
permissions() Возвращает ресурс разрешения.
properties() Возвращает свойства Ресурса.
realtime() Возвращает Ресурс реального времени.
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)

Ссылки:

...