如何在 Python 中使用 Google API v3 创建驱动器文件夹 "public to the web"?
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()
而且我需要将文件夹“public 放到网络上”。为此,我需要指定权限:
'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.
这样的错误。所以在这种情况下,需要在创建新文件夹后使用“权限:创建”的方法。
当这反映到您的脚本中时,它将变成如下。
修改后的脚本:
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)
参考:
我可以使用以下方法制作文件夹:
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()
而且我需要将文件夹“public 放到网络上”。为此,我需要指定权限:
'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.
这样的错误。所以在这种情况下,需要在创建新文件夹后使用“权限:创建”的方法。
当这反映到您的脚本中时,它将变成如下。
修改后的脚本:
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)