如何通过与Google Drive API共享链接下载文件



在谷歌工作区中有一个带有共享链接的文件,以及一个为工作区启用了域范围委派的服务帐户。如何使用Google Drive API通过共享链接下载文件?

详细信息:我在谷歌上搜索了一个工作区,其中有一个在工作区内共享的文件:permissionAnyone in this group with this link can view这个组的意思是这里的工作区。我有一个Service Account,它为上面的工作区授予了域范围的委派。我可以迭代用户(管理SDK(和他们的文件(驱动API(,甚至下载一个文件,如果它的所有者的电子邮件和文件googleId已知。但若我只有共享链接,我看不到通过API下载文件的原生、直接的方法。

答案

您的挑战有两个部分:为服务帐户创建驱动器服务,并使用此服务下载文件

解释

您的挑战包括两部分:为服务帐户创建驱动器服务,并使用该服务下载文件。

代码

from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
def main(user_email):
// CREATE DRIVE SERVICE WITH SERVICE ACCOUNT
creds = ServiceAccountCredentials.from_json_keyfile_name(
SERVICE_ACCOUNT_FILE_PATH,
scopes=['https://www.googleapis.com/auth/drive'])
creds = creds.create_delegated(user_email)
drive_service = build('drive', 'v3', credentials=creds)
// DOWNLOAD FILE
file_id = '0BwwA4oUTeiV1UVNwOHItT0xfa2M'
request = drive_service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print "Download %d%%." % int(status.progress() * 100)
if __name__ == '__main__':
user_email = "something@example.com"
main(user_email)

参考文献

  • 驱动API:Python Quickstart
  • 驱动器API:下载文件
  • 执行Google Workspace域范围的授权

最新更新