Получение метаданных файла из Google API V3 в Python



Я пытаюсь получить метаданные файлов из Google drive API V3 в Python. Я сделал это в API V2, но потерпел неудачу в V3.
Я попытался получить метаданные по этой строке:



data = DRIVE.files().get(fileId=file['id']).execute()


Но все, что я получил, это диктатура 'id', 'kind', 'name', и 'mimeType'. Как я могу получить 'md5Checksum', 'fileSize', и так далее?



Я прочитал документацию .
Предполагается, что я получу все метаданные методами get(), но все, что я получил, - это небольшая часть.



Вот мой код:



from __future__ import print_function
import os

from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None

SCOPES = 'https://www.googleapis.com/auth/drive.metadata
https://www.googleapis.com/auth/drive'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('storage.json', scope=SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = build('drive','v3', http=creds.authorize(Http()))

files = DRIVE.files().list().execute().get('files',[])

for file in files:
print('n',file['name'],file['id'])
data = DRIVE.files().get(fileId=file['id']).execute()
print('n',data)

print('Done')


Я попробовал это ответ:
Google Drive API v3 миграция




Список



Файлы, возвращаемые service.files().list(), теперь не содержат информации, то есть каждое поле равно нулю. Если вы хотите, чтобы список на v3 вел себя как в v2, назовите его так:




service.files().list().setFields("nextPageToken, files");




Но я получаю обратную связь:



DRIVE.files().list().setFields("nextPageToken, files")
AttributeError: 'HttpRequest' object has no attribute 'setFields'
558   3  

3 ответов:

Предположим, что вы хотите получить хэш md5 файла с учетом его fileId, Вы можете сделать это следующим образом:

DRIVE = build('drive','v3', http=creds.authorize(Http()))
file_service = DRIVE.files()
remote_file_hash = file_service.get(fileId=fileId, fields="md5Checksum").execute()['md5Checksum']

Список некоторых файлов на диске:

results = file_service.list(pageSize=10, fields="files(id, name)").execute()

Я построил небольшое приложение gDrive-auto-sync, содержащее больше примеров использования API.
Он хорошо документирован и довольно прост, так что вы можете взглянуть на него, если хотите.
Здесь находится основной файл, содержащий весь код. Это может выглядеть как много, но больше половины строк-это просто комментарии.

Если вы хотите получить все поля для файлового ресурса, просто установите fields='*'

В приведенном выше примере вы бы запустили

data = DRIVE.files().get(fileId=file['id'], fields='*').execute()

Это должно вернуть все доступные ресурсы для файла, как указано в: https://developers.google.com/drive/v3/reference/files

Существует библиотека PyDrive, которая обеспечивает простое взаимодействие с google drive

Https://googledrive.github.io/PyDrive/docs/build/html/filelist.html

Их пример:

from pydrive.drive import GoogleDrive

drive = GoogleDrive(gauth) # Create GoogleDrive instance with authenticated GoogleAuth instance

# Auto-iterate through all files in the root folder.
file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file1 in file_list:
  print('title: %s, id: %s' % (file1['title'], file1['id']))

Все, что вам нужно, это file1['your key']

Comments

    Ничего не найдено.