从Python中获取Google API V3的文件元数据

时间:2016-05-27 19:22:50

标签: python python-3.x google-drive-api

我正在尝试使用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'

3 个答案:

答案 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']