Google 张 python
Google sheets with python
我有 100 多个 google sheet 与很多人共享。我正在尝试从访问列表中删除不活跃的人。 python 有没有办法从版本历史中提取对 google sheet 做出贡献的人员列表?
我使用 gspread 库访问 sheet 但不确定如何获取贡献用户列表。
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient.discovery import build
scope = ['https://www.googleapis.com/auth/drive.activity.readonly']
creds = ServiceAccountCredentials.from_json_keyfile_name('accessAPI.json', scopes = scope)
drive_service = build('driveactivity', 'v2', credentials=creds)
edit_activities = drive_service.activity().query(body={"filter":"detail.action_detail_case:EDIT",
"itemName":"items/xyz",
"consolidationStrategy":"legacy"}).execute()
# Call the People API
scope = ['https://www.googleapis.com/auth/contacts.readonly']
creds = ServiceAccountCredentials.from_json_keyfile_name('accessAPI.json', scopes = scope)
service = build('people', 'v1', credentials=creds)
results = service.people().get(resourceName='people/1080745054',personFields='names,emailAddresses').execute()
运行 通过人 API 的人 ID 返回以下结果。它不包含电子邮件地址
{'resourceName': 'people/1080745054',
'etag': '%EgcBAj0JPjcuGgQBAgUH'}
输出是否被截断?
方法
使用 Python 你可以通过驱动器 API 和人员 API 实现这种行为。
- 使用云端硬盘活动 API
为您的 google 工作表编辑 activity
- 从 Drive Activities API 响应正文中的
actors
对象资源获取编辑人员 ID。
- 从 People API 获取编辑者的电子邮件地址以及编辑者的 ID。
- 列出您的所有文件权限 google 工作表与驱动器 API 权限资源端点。
- 根据你的逻辑,如果用户不在编辑列表中,则更新权限。
这里是建议的伪代码脚本:
loop your_google_sheets:
edit_activities = drive_service.activites().query(filter="detail.action_detail_case:EDIT", itemName="items/"+your_google_sheets.id)
editors = edit_activities.get(actors_ids)
loop editors:
editors_emails += people_service.people().get(resourceName=editors.personName, personFields="emailAddresses")
file_permissions = drive_service.permissions().list(fileId=your_google_sheets.id)
loop file_permissions:
update_if_not_editor(editors_email, file_permissions.id) # Implement your own logic
参考资料
我有 100 多个 google sheet 与很多人共享。我正在尝试从访问列表中删除不活跃的人。 python 有没有办法从版本历史中提取对 google sheet 做出贡献的人员列表? 我使用 gspread 库访问 sheet 但不确定如何获取贡献用户列表。
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient.discovery import build
scope = ['https://www.googleapis.com/auth/drive.activity.readonly']
creds = ServiceAccountCredentials.from_json_keyfile_name('accessAPI.json', scopes = scope)
drive_service = build('driveactivity', 'v2', credentials=creds)
edit_activities = drive_service.activity().query(body={"filter":"detail.action_detail_case:EDIT",
"itemName":"items/xyz",
"consolidationStrategy":"legacy"}).execute()
# Call the People API
scope = ['https://www.googleapis.com/auth/contacts.readonly']
creds = ServiceAccountCredentials.from_json_keyfile_name('accessAPI.json', scopes = scope)
service = build('people', 'v1', credentials=creds)
results = service.people().get(resourceName='people/1080745054',personFields='names,emailAddresses').execute()
运行 通过人 API 的人 ID 返回以下结果。它不包含电子邮件地址
{'resourceName': 'people/1080745054',
'etag': '%EgcBAj0JPjcuGgQBAgUH'}
输出是否被截断?
方法
使用 Python 你可以通过驱动器 API 和人员 API 实现这种行为。
- 使用云端硬盘活动 API 为您的 google 工作表编辑 activity
- 从 Drive Activities API 响应正文中的
actors
对象资源获取编辑人员 ID。 - 从 People API 获取编辑者的电子邮件地址以及编辑者的 ID。
- 列出您的所有文件权限 google 工作表与驱动器 API 权限资源端点。
- 根据你的逻辑,如果用户不在编辑列表中,则更新权限。
这里是建议的伪代码脚本:
loop your_google_sheets:
edit_activities = drive_service.activites().query(filter="detail.action_detail_case:EDIT", itemName="items/"+your_google_sheets.id)
editors = edit_activities.get(actors_ids)
loop editors:
editors_emails += people_service.people().get(resourceName=editors.personName, personFields="emailAddresses")
file_permissions = drive_service.permissions().list(fileId=your_google_sheets.id)
loop file_permissions:
update_if_not_editor(editors_email, file_permissions.id) # Implement your own logic