通过 python 使用 Google Drive API V3 获取 Google Drive 文件所有者电子邮件地址

2024-01-27

我无法通过 Google Drive API v3 获取 Google 云端硬盘上文件的所有者。

我可以在 v2 下做到这一点,但事情已经改变了。

根据文档 https://developers.google.com/drive/api/v3/reference/permissions/get我需要:

  1. 列出文件的权限(没问题)
  2. 从该权限列表中查找具有“所有者”角色的权限的 ID(没问题)
  3. 获得该许可......这应该返回权限资源其中应包括电子邮件地址(问题!)

不幸的是,我收到的信息包括一些信息,但不包括电子邮件地址。

我怀疑我需要更改“get”调用来告诉 API 我要查找哪些字段,但我不知道如何执行此操作。

这就是我得到的(v3):

from oauth2client.service_account import ServiceAccountCredentials
from httplib2            import Http
from apiclient.discovery import build

def build_service(user):
  keyfile = 'C:\Python27\Scripts\Certificates for Transfer owner script\Transfer Ownership on Drive-f240cff252af.json'
  SCOPE = 'https://www.googleapis.com/auth/drive'
  credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes=SCOPE).create_delegated(user)
  http_auth = credentials.authorize(Http())
  return build('drive', 'v2', http=http_auth)

service = build_service('[email protected] /cdn-cgi/l/email-protection')
f = service.files().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk').execute()

p = service.permissions().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk',permissionId='18137907375963748644').execute()
currentOwner = p['emailAddress']

不幸的是,我收到一个“KeyError:‘emailAddress’”(如果我查看“p”的内容,有角色、种类、类型和 id,但没有电子邮件地址)。

这对我有用(使用 v2):

from oauth2client.service_account import ServiceAccountCredentials
from httplib2            import Http
from apiclient.discovery import build

def build_service(user):
  keyfile = 'C:\Python27\Scripts\Certificates for Transfer owner script\Transfer Ownership on Drive-f240cff252af.json'
  SCOPE = 'https://www.googleapis.com/auth/drive'
  credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes=SCOPE).create_delegated(user)
  http_auth = credentials.authorize(Http())
  return build('drive', 'v2', http=http_auth)

service = build_service('[email protected] /cdn-cgi/l/email-protection')
f = service.files().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk').execute()

currentOwner = f['owners'][0]['emailAddress']

太简单了...只需将以下内容添加到 get 调用中:

,fields='电子邮件地址'

i.e.

currentOwner = service.permissions().get(fileId='1lASRBuAHRxEC-T0X5SdlF3w7X_168Q2QV9L0V6QaXUk',permissionId='18137907375963748644',fields='emailAddress').execute()['emailAddress']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 python 使用 Google Drive API V3 获取 Google Drive 文件所有者电子邮件地址 的相关文章

随机推荐

  • 如何切换猫鼬数组中的布尔值?

    我想切换模式数组中的布尔值 我正在尝试使用数据库中存在的值切换该值 请参阅代码 但只是真变假 而不是假变真 以下是代码 exports postStatusItemchange req res next gt const productId
  • Jetpack Compose 滚动条

    有没有办法添加滚动条来添加LazyColumn ScrollableColumn已弃用 Javadoc 没有提及 Jetpack Compose 中有关滚动条的任何内容 Just to clarify this is the design
  • 数据添加到QLineSeries后如何更新/重绘QChart?

    我正在生成一些我想用来绘制图表的数据QChart 朋友们 这是我第一次使用QChart 所以基本上我所做的就是复制QLine系列示例 https doc qt io qt 5 qtcharts linechart example html并
  • 如何在Android弹出菜单中设置默认选择的选项?

    我使用以下代码来创建菜单 PopupMenu popup new PopupMenu getApplicationContext v MenuInflater inflater popup getMenuInflater inflater
  • 如何使用ggplot2将x轴从年更改为月

    我有一个随时间变化的网络访问量图表 其中绘制了从 2014 年至今的每日流量 如下所示 ggplot subset APRA Post Day gt 2013 12 31 aes x Post Day y Page Views geom l
  • php从同一浏览器和同一php脚本同时下载文件

    你好 我有这个简单的代码 强制随机文件下载 我的问题是 如果我从同一个浏览器调用脚本两次或多次 第二次下载将不会开始 直到第一次完成或中断 因此我每次只能下载一个文件 你有什么线索吗 这可能与PHP的会话处理有关 使用默认的会话处
  • Chrome 中的窗口高度错误

    我正在尝试获取 Chrome 浏览器窗口的正确宽度和高度 Firefox 中的大小是正确的 我没有尝试过任何其他浏览器 我已将文档类型设置为 DOCTYPE html并尝试过 window height window width windo
  • 在自定义活动中绘制 TextView?

    我正在实施一个自定义View 我需要在其中绘制一些文本 文本必须适合一个盒子 所以我必须将其分解并使其适合 因此 我想我可以使用TextView并在我的自定义中绘制它View 这是我尝试过的 canvas drawRoundRect rec
  • 如何在 Two.js 中解释外部 svg 文件

    有什么方法可以在two js 中解释带有对象标记的外部svg 文件吗 我尝试了下面的方法但是 HTML JS var mySvg document getElementById mysvg contentDocument var shape
  • Maven Dll依赖问题

    我正在开发一个基于 swing 的桌面应用程序 该应用程序使用 MediaInfo dll 库 我首先像描述的那样将此 dll 安装到我的本地存储库这个答案 https stackoverflow com questions 1001774
  • java中导入语句的顺序[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 想知道 哪种是订购导入声明的正确方法 另外哪个具有更高的可读性 like 外部课程 如java util List 然后是内部包类 仅按字母顺序
  • Tensorflow 中 sess.run([op1, op2...]) 的顺序

    我想知道 sess run ops list 中操作列表的运行顺序是什么 例如 对于典型的分类场景 loss sess run train op loss op if train op先运行 那么损失就是当前反向传播之后的损失 但如果los
  • Python,导入错误:未定义的符号:g_utf8_skip

    StackOverflow 上大约有几十个类似的问题 但经过几个小时的潜伏 我终于放弃了 所以我正在尝试为Python编写一个C扩展 我们就这样称呼它吧mylib 这是头文件 mylib h ifndef mylib H define my
  • 如何使用 JSqlParser 添加新条件?

    我想向我的 sql 添加新条件 例如如果查询是 SELECT EMP ID FIRST NAME FROM EMPLOYEES 我可以使用此代码添加新的原因 Override protected void setLimit final Pl
  • 通过应用自定义 css 类禁用 html 输入元素

    我想通过应用我的自定义 css 类来禁用 div 的所有输入元素 但我找不到任何可以禁用输入元素的 css 属性 目前我在做什么 div sercvice detail input attr disabled true retention
  • 找不到 Webpackject.preload.js 文件[重复]

    这个问题在这里已经有答案了 我将 Vue Typescript 与 webpack 结合使用 每次我打开页面inject preload js抛出一个错误 例如GET blob http URL 1fbc0606 8477 416b a45
  • Javascript 闭包和内存问题

    Following function add new table entry to table and return interface which has function which uses closure to access and
  • 什么是 .inc 以及为什么使用它?

    我经常在 PHP 中看到包含 inc 文件的示例 inc 是什么意思 它是用来做什么的 使用它有什么缺点和优点 它没有任何意义 只是一个文件扩展名 如果该文件被设计为被其他 PHP 文件包含 则某些人习惯用 inc 扩展名命名该文件 但这只
  • Nuxt3生成类型错误:无法读取null的属性(读取'isCE')

    我在我的应用程序中使用 Nuxt3 Vite Leaflet Bootstrap 该应用程序在开发中运行良好 但是当我尝试使用生成静态站点时npm run generate 我收到以下错误 类型错误 无法读取 null 的属性 读取 isC
  • 通过 python 使用 Google Drive API V3 获取 Google Drive 文件所有者电子邮件地址

    我无法通过 Google Drive API v3 获取 Google 云端硬盘上文件的所有者 我可以在 v2 下做到这一点 但事情已经改变了 根据文档 https developers google com drive api v3 re