4

我的任务是连接到 Google Drive API(在PyDrive 模块的帮助下)并下载一些文件。我设法让这个东西在我的本地计算机上运行 - 我在谷歌控制台注册了我的“应用程序” ,我下载了client_secret.json,运行脚本,验证窗口弹出,我用我的谷歌帐户登录并且可以访问驱动器,一切还好。

现在我想在服务器上使用我的脚本,但我基本上不知道该怎么做。我向我的提供商提交了一张支持票,他们的回答是:


你需要得到这些:

{
 "#authJson": "{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1457455916}",
  "#appKey": "key",
  "#appSecret": "secret"
}

哪里#authJson是'whoevers-drive-you-want-to-access'授权的结果,并且#appKey来自#appSecretoauth。


我不知道如何确切地得到这些。我知道怎么下载client_secret.json。所以问题是:如何获得这些?我什至走在正确的轨道上吗?或者需要不同的方法。

理想的最终状态是:在我的 Google Drive 中拥有某种永久access_token属性,我可以将其传递给应用程序(例如,作为字符串参数)。然后该应用程序连接到我的云端硬盘并下载所需的文件。

4

2 回答 2

6

编辑:请参阅编辑预授权服务器应用程序

您正在寻找的是CommandLineAuth()来自 PyDrive。

您的代码应如下所示:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive 


ga = GoogleAuth()
ga.CommandLineAuth()  # This line in your code currently calls LocalWebserverAuth()
drive = GoogleDrive(self.ga)
# etc.

当您在服务器上运行脚本时,它会要求您将链接复制粘贴到本地浏览器中。使用特定帐户登录后,您将获得看似随机的字母和数字字符串。将该字符串粘贴到您的控制台中,您应该一切顺利。

由于您可能不想在每次脚本运行时都执行此操作,请考虑将settings.yaml文件添加到您的项目中,这样您就可以保存登录凭据。可以在文档中找到有关如何设置的详细信息。


编辑:如果您想在没有进一步身份验证的情况下将 PyDrive 脚本分发到任何服务器,您必须:

  1. 下载client_secret_xxxxx.json
  2. settings.yaml文件添加到您的项目中,请参阅此模板。确保save_credentials_file:已设置,例如creds.json
  3. 将诸如client-secret从的信息复制client_secret_xxxx.jsonsettings.yaml文件中。
  4. 在我们的开发机器上完成身份验证过程 - 现在您的文件夹中应该有一个包含凭据的额外文件(例如creds.json
  5. 将包含 a) 原始脚本、b)settings.yaml文件和 c) 生成的creds.json文件的整个目录复制到远程计算机。确保相对路径不会改变。
  6. 利润?

注意:Google Drive API 附加了 API 调用限制,防止在 100 秒内调用超过 100 次。

于 2017-03-23T14:22:36.837 回答
0

您需要通过身份验证才能访问某人的私人驱动器帐户。一旦他们授予您访问权限,他们必须第一次通过网络浏览器执行此操作,您应该保存上面的刷新令牌。刷新令牌将使您能够在需要时从服务器端脚本访问他们的数据。请参阅:Python 快速入门

如果您只能访问您个人控制的驱动器帐户,请查看使用 OAuth 2.0 进行服务器到服务器应用程序的服务帐户

于 2017-03-23T11:25:02.467 回答