本教程详细介绍了如何使用google drive v3 python api,以编程方式为整个组织(域)共享google drive文件夹。核心方法是将文件夹创建与权限设置解耦,通过`files().create`创建文件夹后,再利用`permissions().create`方法配置域级访问权限,确保组织内所有成员能够根据指定角色访问新建的共享文件夹。
在企业环境中,经常需要将Google Drive中的特定文件夹共享给整个组织内的所有成员,而非仅仅是特定用户。虽然Google Drive界面提供了“通用访问”选项,但在使用Google Drive v3 Python API进行编程时,直接在文件夹创建时设置域级共享权限往往不生效。本文将详细阐述如何通过正确的API调用流程,实现Google Drive文件夹的组织级(域)共享。
问题的关键在于,Google Drive API的设计将文件或文件夹的创建与权限设置视为两个独立的操作。files().create方法主要负责创建资源本身,而域级共享等复杂的权限管理则需要通过permissions().create方法来完成。
首先,我们需要使用files().create方法来创建一个新的Google Drive文件夹。在这个阶段,我们主要关注文件夹的名称、MIME类型以及是否支持共享云端硬盘(Shared Drives)。
from apiclient import discovery
import httplib2 # 确保已安装 httplib2 库
# 假设 get_google_drive_credentials() 函数已正确实现,
# 用于获取并授权Google Drive API的凭据。
# 例如:
# from google.oauth2.credentials import Credentials
# from google_auth_oauthlib.flow import InstalledAppFlow
# from google.auth.transport.requests import Request
# import os
# import pickle
#
# SCOPES = ['https://www.googleapis.com/auth/drive']
#
# def get_google_drive_credentials():
# creds = None
# if os.path.exists('token.pickle'):
# with open('token.pickle', 'rb') as token:
# creds = pickle.load(token)
# if not creds or not creds.valid:
# if creds and creds.expired and creds.refresh_token:
# creds.refresh(Request())
# else:
# flow = InstalledAppFlow.from_client_secrets_file(
# 'credentials.json', SCOPES)
# creds = flow.run_local_server(port=0)
# with open('token.pickle', 'wb') as token:
# pickle.dump(creds, token)
# return creds
credentials = get_google_drive_credentials()
http = credentials.authorize(httplib2.Http())
drive_service = discovery.build('drive', 'v3', http=http)
# 定义文件夹体
folder_body = {
'name': '我的组织共享文件夹', # 文件夹名称
'mimeType': "application/vnd.google-apps.folder", # 指定MIME类型为文件夹
}
# 创建文件夹,并指定支持共享云端硬盘
new_folder = drive_service.files().create(body=folder_body, supportsAllDrives=True).execute()
print(f"文件夹 '{new_folder['name']}' 创建成功,ID: {new_folder['id']}")在上述代码中:
文件夹创建成功后,我们需要获取其ID,并使用permissions().create方法为该文件夹添加域级访问权限。
# new_folder 变量来自上一步骤的执行结果
# 定义权限体
permission_body = {
"role": "writer", # 授予的权限角色,例如 "reader", "writer", "commenter"
"type": "domain", # 权限类型,指定为 "domain" 表示整个域
"allowFileDiscovery": True, # 允许域内用户通过搜索发现此文件/文件夹
"domain": "your-domain.com" # 替换为你的实际Google Workspace域名,例如 "example.com"
}
# 为新建文件夹创建权限
# fileId 参数指向要设置权限的文件夹ID
# supportsAllDrives=True 同样适用于权限设置,如果文件夹在共享云端硬盘中
res = drive_service.permissions().create(
body=permission_body,
fileId=new_folder["id"],
supportsAllDrives=True,
fields='*' # 请求返回所有字段以便查看结果
).execute()
print("域级权限设置结果:")
print(res)在上述代码中:
将上述两个步骤整合,形成一个完整的Python脚本:
from apiclient import discovery
import httplib2
import os
import pickle
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
# Google Drive API 授权范围
SCOPES = ['https://www.googleapis.com/auth/drive']
def get_google_drive_credentials():
"""
获取并授权Google Drive API的凭据。
此函数会尝试从 'token.pickle' 加载凭据,如果不存在或过期,
则会通过 'credentials.json' 文件进行授权流程,并保存凭据。
"""
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
return creds
def create_and_share_folder_with_domain(folder_name, domain_name, role="writer"):
"""
创建一个Google Drive文件夹并将其共享给整个域。
Args:
folder_name (str): 要创建的文件夹的名称。
domain_name (str): 你的Google Workspace域名(例如 'example.com')。
role (str): 授予域的权限角色(例如 'reader', 'writer')。
"""
credentials = get_google_drive_credentials()
http = credentials.authorize(httplib2.Http())
drive_service = discovery.build('drive', 'v3', http=http)
# 1. 创建文件夹
folder_body = {
'name': folder_name,
'mimeType': "application/vnd.google-apps.folder",
}
try:
new_folder = drive_service.files().create(body=folder_body, supportsAllDrives=True).execute()
print(f"文件夹 '{new_folder['name']}' (ID: {new_folder['id']}) 创建成功。")
except Exception as e:
print(f"创建文件夹失败: {e}")
return
# 2. 创建域级权限
permission_body = {
"role": role,
"type": "domain",
"allowFileDiscovery": True,
"domain": domain_name
}
try:
res = drive_service.permissions().create(
body=permission_body,
fileId=new_folder["id"],
supportsAllDrives=True,
fields='*'
).execute()
print(f"成功为域 '{domain_name}' 设置 '{role}' 权限。")
print("权限设置详情:", res)
except Exception as e:
print(f"设置域级权限失败: {e}")
if __name__ == '__main__':
# 请替换为你的实际文件夹名称和域名
my_folder_name = "我的团队共享资料"
my_domain = "your-domain.com" # !!! 替换为你的真实域名 !!!
create_and_share_folder_with_domain(my_folder_name, my_domain, role="writer")运行前准备:
境下的域。通过将Google Drive文件夹的创建与权限设置解耦,我们可以有效地利用Google Drive v3 Python API实现复杂的共享策略。核心在于先通过files().create创建文件夹,然后利用其返回的ID,通过permissions().create方法并指定type: "domain"和正确的domain参数来赋予整个组织访问权限。这种两步走的策略确保了灵活性和精确的权限控制。
# python
# js
# json
# go
# app
# 硬盘
# ai
# google
# 邮箱
# api调用
# python脚本
# red
相关文章:
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
建站主机选购指南:核心配置优化与品牌推荐方案
昆明网站制作哪家好,昆明公租房申请网上登录入口?
如何用VPS主机快速搭建个人网站?
如何挑选高效建站主机与优质域名?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之星如何实现五合一智能建站与营销推广?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
Swift中swift中的switch 语句
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
微课制作网站有哪些,微课网怎么进?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何快速生成专业多端适配建站电话?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
建站10G流量真的够用吗?如何应对访问高峰?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
高防服务器租用首荐平台,企业级优惠套餐快速部署
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
如何通过虚拟主机快速完成网站搭建?
如何快速辨别茅台真假?关键步骤解析
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何彻底卸载建站之星软件?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
香港服务器如何优化才能显著提升网站加载速度?
济南网站制作的价格,历城一职专官方网站?
如何在IIS中新建站点并配置端口与物理路径?
大连 网站制作,大连天途有线官网?
香港服务器WordPress建站指南:SEO优化与高效部署策略
建站之星后台密码遗忘?如何快速找回?
建站主机SSH密钥生成步骤及常见问题解答?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
深入理解Android中的xmlns:tools属性
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
广德云建站网站建设方案与建站流程优化指南
建站之星如何实现PC+手机+微信网站五合一建站?
建站主机选哪家性价比最高?
建站之星备案是否影响网站上线时间?
学校为何禁止电信移动建设网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
网页设计与网站制作内容,怎样注册网站?
网站制作话术技巧,网站推广做的好怎么话术?
*请认真填写需求信息,我们会在24小时内与您取得联系。