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 实现这种行为。

  1. 使用云端硬盘活动 API
  2. 为您的 google 工作表编辑 activity
  3. 从 Drive Activities API 响应正文中的 actors 对象资源获取编辑人员 ID。
  4. 从 People API 获取编辑者的电子邮件地址以及编辑者的 ID。
  5. 列出您的所有文件权限 google 工作表与驱动器 API 权限资源端点。
  6. 根据你的逻辑,如果用户不在编辑列表中,则更新权限。

这里是建议的伪代码脚本:

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

参考资料

People API get

Drive Activities API query

Drive API Permissions list

Drive API Permissions update