当前位置: 首页 > 知识库问答 >
问题:

如何通过Google Drive的API访问与Google的API Explorer相同的文件列表?

易阳云
2023-03-14

使用Google Drive的API,我可以获得授权和令牌,但在尝试获取文件列表时,API目前只返回一项:名为“Getting Started”的PDF。这大概是一个刚刚建立的Google Drive中的默认项——这个项早就从我们正在使用的Google Drive帐户中删除了。

同时使用API浏览器(https://developers.google.com/apis-explorer)返回数百个项目,事实上,这些项目代表了相关帐户的Google Drive。

API Explorer表示它发送的请求是:

GET https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&key={YOUR_API_KEY}

发送直接返回"权限不足"错误,这是有意义的:这是api_key,而不是access_token切换

API和浏览器之间的差异给人的印象是。。。

a)每个账户都引用了不同的账户,或者

b) 在API控制台中授予的权限/范围/访问权限(https://console.developers.google.com)比探险家还窄

关于a)每个引用不同的帐户:不太可能。所有凭据都是在登录到用于运行API资源管理器的同一Google帐户时在API控制台中创建的。

关于b)权限/范围/访问在某种程度上有所不同:可能性更大,但到目前为止,尚不清楚如何或如何调整以产生差异。

发送的cURL调用:

curl https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&key={YOUR_API_KEY} (NG.  Needs a token)
curl https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&access_token={recently_obtained_token} (this works, but returns only one item -- the "Getting Started" PDF)

报税表:

{"kind": "drive#fileList", "incompleteSearch": false, "files": [{"kind": "drive#file", "id": "XXXX", "name": "Getting started", "mimeType": "application/pdf"}]}

这里列出了用于达到这一目的的授权和令牌步骤。。。如何使用cURL连接到Google Drive API?

根据这篇文章(Access Google Drive API返回空文件列表),使用的范围确实是https://www.googleapis.com/auth/drive在同一个链接下,一位kvzrock的回答建议给予“对服务帐户的电子邮件地址的许可”两个链接:

Google Drive API、Oauth和服务帐户

如何在没有用户干预的情况下授权应用程序(网络或已安装)?

但是还没有理解这些的运气。


共有2个答案

梅庆
2023-03-14
匿名用户

如何通过Google Drive的API访问与Google的API Explorer相同的文件列表?

由于您使用的是服务帐户,这将是非常困难的。服务帐户不是你的服务帐户是一个虚拟用户,有自己的谷歌驱动器帐户。目前,其驱动器帐户仅包含一个文件<代码>“入门”。

谷歌apis探索允许你登录到您的个人谷歌驱动器帐户使用Oauth2.这是一个不同的授权流程,它要求用户登录到他们的谷歌帐户,并同意应用程序访问他们的数据。这让你可以访问你的谷歌驱动器帐户。

服务帐户是一种不同类型的授权流。流中的凭据用于登录服务帐户用户,这只能在服务器端完成。服务帐户身份验证无法在客户端完成。服务账户的诀窍在于它们可以预先授权。因此,您可以授予服务帐户访问数据的权限,当它登录时,它不需要像正常的Oauth2流那样同意访问。因此,您可以与服务帐户共享个人google drive帐户上的文件和目录。这是通过获取服务帐户的电子邮件地址并与其他用户一样共享文件或目录来实现的。然后,服务帐户将有权访问该文件或目录。

现在,为了解释为什么我说很难从谷歌API浏览器获得准确的响应。无法与其他人共享您的根文件夹。如果你想让服务帐户具有完全访问权限和相同的响应,那么你必须与服务帐户共享根文件夹中的每个目录以及google drive帐户根目录中的每个文件。您添加的任何新文件或文件夹都必须与服务帐户共享。

牟华翰
2023-03-14

听起来好像你使用了一个服务帐户,所以你使用的凭据以及你看到的一个文件属于服务帐户,而不是你的用户帐户。确认的一些方法:-

  1. 检查文件的创建日期。如果与生成凭据的日期相同,则为服务帐户

不幸的是,谷歌留档让人们得出结论,服务账户是绕过OAuth以获取文件的便捷方式,而它应该用大红字写“服务账户不是你认为有的账户!!!”

你有两个选择:-1。与服务帐户1共享您想要访问的所有文件。停止使用服务帐户,按照您发布的最后一个链接中的步骤操作(如何在没有用户干预的情况下授权应用程序(web或已安装的应用程序)直接访问您的常规帐户

 类似资料:
  • 我试图创建一个nodejs应用程序,可以准备我的GoogleDrive文件。我不想要一个每个人都可以使用的应用程序,它只是特定于我的谷歌驱动。 我在控制台中为GoogleDrive创建了一个api密钥,没有任何限制。 这是我正在做的电话:https://www.googleapis.com/drive/v3/files?pageSize=10 当使用这个键我得到这个错误: 这在谷歌硬盘上可能吗?

  • 我对谷歌应用编程接口非常陌生,我有麻烦了。我留档谷歌照片APIJava,然后我在谷歌API控制台创建OAuth凭据并下载它(credentials.json文件)。之后,我试图访问谷歌照片。这里是代码从留档: 但是我不明白如何创建凭据对象,将其传递给FixedCreentialsProvider.create()方法 你能给我一些解释/链接吗?

  • 问题内容: 无法将图片上传到。现在,如果选择的文件是,我希望能够将文件转换为并将转换后的文件上传到。我能够在转换到与仅如果我给了文件的路径。如何从中访问上载的文件?下面是我的代码: 我正在尝试像这样访问上载的文件: 因为在函数中传递了一个参数。 我的表格: 我在过程的哪一部分转换文件? 请帮忙。非常感谢。 问题答案: 您正在尝试在本地处理文件。该文件必须是您服务器的文件系统,或者至少要在上公开可用

  • 我的Google API有问题。我希望避免通过浏览器检索我的访问授权。我想将代码直接检索到一个变量中。这是我发送的URL:

  • 我对谷歌API很陌生,我有点迷路了:) 首先,我玩了谷歌API资源管理器,一切都很好,我所有的要求。 然后,我开始编写一个小的Python脚本来授权并通过服务帐户调用API。 看起来是这样的: 然而,虽然我认为这是一种好,我仍然得到这个错误 我想我在这里错过的是创建我的令牌(?)在调用url之前?但这是如何产生的呢?我知道有1000个例子,我使用了一些已经在github中的脚本,它们可以工作,但是

  • 我试图通过谷歌应用程序脚本调用谷歌表单API。例如,我遵循此处提供的说明: https://developers.google.com/sheets/api/quickstart/js 我已经通过我的谷歌云平台项目生成了客户端ID和API密钥,正如其他地方建议的那样。 现在,我已经创建了一个包含两个文件的谷歌应用程序脚本,ode.gs文件和一个名为index.html的文件,其中包含从上面的谷歌表