我正在尝试使用Python从Google驱动器API V3中检索文件元数据。我是在API V2中完成的,但在V3中失败了。 我尝试通过这一行获取元数据:
data = DRIVE.files().get(fileId=file['id']).execute()
但我得到的只是'id'
,'kind'
,'name'
和'mimeType'
的字谜。我如何获得'md5Checksum'
,'fileSize'
等等?
我读了documentation。
我应该通过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 Migration
列表
service.files().list()
返回的文件现在不包含信息,即每个字段都为空。如果您希望v3上的列表与v2中的行为类似,请将其命名为:service.files().list().setFields("nextPageToken, files");
但是我得到了一个回溯:
DRIVE.files().list().setFields("nextPageToken, files")
AttributeError: 'HttpRequest' object has no attribute 'setFields'
答案 0 :(得分:8)
假设您想要获取给定fileId
的文件的md5哈希值,您可以这样做:
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使用示例 它记录完备,非常基础,所以如果你愿意,你可以看看它 Here是包含所有代码的主文件。它可能看起来很多,但超过一半的行只是评论。
答案 1 :(得分:6)
如果要检索文件资源的所有字段,只需设置fields='*'
在上面的示例中,您将运行
data = DRIVE.files().get(fileId=file['id'], fields='*').execute()
这应该返回文件的所有可用资源,如下所示: https://developers.google.com/drive/v3/reference/files
答案 2 :(得分:0)
有一个库PyDrive可以轻松与谷歌驱动器进行交互
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']