Получение метаданных файла из 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'
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