Python:Google Drive Authentification

时间:2017-03-23 11:08:56

标签: python google-api google-drive-api google-oauth pydrive

我的任务是连接到Google Drive API(在PyDrive module的帮助下)并下载一些文件。我以某种方式设法在我的本地计算机上运行这个东西 - 我在Google Console注册了我的“应用程序”,我下载了client_secret.json,运行了脚本,弹出了验证窗口,我登录了我的Google帐户和云端硬盘都可以访问,一切正常。

现在我想在服务器上使用我的脚本,我基本上不知道如何做到这一点。我向我的提供商提交了一张支持票,答案是:

你需要得到这些:

{
 "#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 #appSecret来自oauth。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

您的代码应如下所示:

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文件,这样可以保存登录凭据。有关如何设置的详细信息,请参阅docs

编辑:如果您想将PyDrive脚本分发到任何服务器而无需进一步验证,则必须:

  1. 下载client_secret_xxxxx.json
  2. settings.yaml文件添加到您的项目中,请参阅此template。确保设置了save_credentials_file:,例如creds.json
  3. client-secret中的client_secret_xxxx.json等信息复制到settings.yaml文件中。
  4. 在我们的开发机器上完成身份验证过程 - 您现在应该在包含凭据的文件夹中有一个额外的文件(例如creds.json
  5. 复制整个目录,包括a)原始脚本,b)settings.yaml文件,c)生成的creds.json文件到远程机器。确保相对路径不会改变。
  6. 利润?
  7. 注意:Google Drive API附带API限制,可在100秒内阻止超过100次通话。

答案 1 :(得分:0)

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

如果您只访问自己控制的驱动器帐户,请查看服务帐户使用OAuth 2.0 for Server to Server Applications