繁体   English   中英

如何在 Python 中使用 Google API v3 使驱动器文件夹“对网络公开”?

[英]How to make drive folder "public to the web" using Google API v3 in Python?

我可以使用以下方法创建文件夹:

from Google import Create_Service

CLIENT_SECRET_FILE = "credentials_gsuite.json"
API_NAME = "drive"
API_VERSION ="v3"
SCOPES = ["https://www.googleapis.com/auth/drive"]
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
folder_name = "Folder"

file_metadata = {"name" : folder_name, "mimeType" : "application/vnd.google-apps.folder"}
service.files().create(body=file_metadata,).execute()

而且我需要将文件夹设为“对网络公开”。 为此,我需要指定权限:

'role': 'reader

和一个类型:

'type': 'anyone'

并允许:

"allowFileDiscovery": True

从文档来看,这应该有效:

    from Google import Create_Service
    
    CLIENT_SECRET_FILE = "credentials_gsuite.json"
    API_NAME = "drive"
    API_VERSION ="v3"
    SCOPES = ["https://www.googleapis.com/auth/drive"]
    service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
    folder_name = "Folder"
    
    file_metadata = {"name" : folder_name, "mimeType" : "application/vnd.google-apps.folder", 'role': 'reader', 'type': 'anyone',"allowFileDiscovery": True}
    service.files().create(body=file_metadata,).execute()

但我没有把它发布到网上。 我错过了什么?

文档: https : //developers.google.com/drive/api/v3/reference/permissions

改装要点:

  • 不幸的是,在service.files().create()的方法中,似乎permissions不可写。 {"mimeType":"application/vnd.google-apps.folder","name":"sample","permissions":[{"role":"reader","type":"anyone","allowFileDiscovery":true}]}作为"Files: create"的请求体,出现类似The resource body includes fields which are not directly writable.的错误The resource body includes fields which are not directly writable. 发生。 所以在这种情况下,需要在新建文件夹后使用“权限:创建”的方法。

当这反映到您的脚本时,它变成如下。

修改后的脚本:

folder_name = "Folder"
file_metadata = {"name": folder_name, "mimeType": "application/vnd.google-apps.folder"}
folder = service.files().create(body=file_metadata,).execute()
folderId = folder.get('id')

permission = {
    'role': 'reader',
    'type': 'anyone',
    'allowFileDiscovery': True
}
res = service.permissions().create(fileId=folderId, body=permission).execute()
print(res)

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM