如何使用Google的api客户端v3在Google电子表格中吸引观看者

时间:2019-10-22 11:27:29

标签: python google-sheets google-drive-api

我正在尝试检索驱动器中每个电子表格的所有查看者。 为此,我正在使用python和google的api客户端。我已经设法从文件对象中检索工作表的名称,所有者和其他信息,但是我找不到找到其查看者的方法。

到目前为止的代码:

page_token=None
while True:
    a = service.files().list(
                    q="mimeType='application/vnd.google-apps.spreadsheet'",
                    corpora='allDrives',
                    includeItemsFromAllDrives=True,
                    supportsAllDrives=True,
                    fields='nextPageToken, files(id, name, parents, owners, lastModifyingUser, modifiedTime)',
                    pageToken=page_token
                    ).execute()

    for file in a.get('files', []):
            print('Found file: %s (%s) %s' % (file.get('name'), file.get('id')))
    page_token = a.get('nextPageToken', None)

    if page_token is None:
        break

1 个答案:

答案 0 :(得分:0)

  • 您要检索Google云端硬盘中文件的查看器(阅读器)。
  • 您要使用带有python的google-api-python-client来实现此目的。
  • 您已经能够从Google云端硬盘中的文件中获取元数据。

如果我的理解是正确的,那么该修改如何?

修改点:

  • 为了从文件中检索查看器,请将permissions添加到fields
  • 我认为print('Found file: %s (%s) %s' % (file.get('name'), file.get('id')))发生了错误。

修改后的脚本:

修改脚本后,它如下所示。请认为这只是几种修改之一。

page_token = None
while True:
    a = service.files().list(
        q="mimeType='application/vnd.google-apps.spreadsheet'",
        corpora='allDrives',
        includeItemsFromAllDrives=True,
        supportsAllDrives=True,
        fields='nextPageToken, files(id, name, parents, owners, lastModifyingUser, modifiedTime, permissions)',  # Modified
        pageToken=page_token
    ).execute()

    for file in a.get('files', []):
        print('Found file: %s (%s)' % (file.get('name'), file.get('id')))  # Modified

        # I added below script for showing the viewers.
        for permission in file.get('permissions', []):
            if permission['role'] == 'reader':
                print("Viewer of %s: type is %s. email is %s." % (file.get('name'), permission.get('type'), permission.get('emailAddress')))

    page_token = a.get('nextPageToken', None)

    if page_token is None:
        break

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。