Python:谷歌驱动器身份验证

4
我的任务是连接到Google Drive API(借助PyDrive模块),并下载一些文件。我在本地计算机上设法使这个东西工作-我在Google控制台注册了我的“应用程序”,下载了client_secret.json,运行了脚本,认证窗口弹出,我使用我的Google帐户登录,Drive可访问,一切正常。
现在我想在服务器上使用我的脚本,但我基本上不知道该怎么做。我向我的提供商提交了支持票据,他们的答复是:

你需要获得这些:

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

其中#authJson是“您想访问的任何人驱动器”的授权结果,#appKey#appSecret来自oauth。


我不知道如何确切地获取这些内容。我知道如何下载client_secret.json。所以问题是:如何获取这些内容?我是否走在正确的轨道上?或者需要采取不同的方法。
理想的最终状态应该是: 拥有某种永久的access_token,可以将其作为字符串参数传递给应用程序,然后应用程序连接到我的Drive并下载所需的文件。
2个回答

8

编辑:请查看预授权的服务器应用程序的编辑。

您需要使用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 文件,以保存登录凭据。如何设置此文件的详细信息可以在文档中找到。
编辑:如果您想在不需要进一步身份验证的情况下将 PyDrive 脚本分发到任何服务器,则必须执行以下操作:
  1. 下载 client_secret_xxxxx.json
  2. settings.yaml 文件添加到您的项目中,参见此模板。确保设置了 save_credentials_file:,例如 creds.json
  3. client_secret_xxxx.json 中的信息(例如 client-secret)复制到 settings.yaml 文件中。
  4. 在开发计算机上进行身份验证过程 - 您现在应该在文件夹中有一个额外的文件,其中包含凭据(例如 creds.json
  5. 将包含原始脚本、settings.yaml 文件和生成的 creds.json 文件的整个目录复制到远程计算机上。确保相对路径不会改变。
  6. 赚取利润?
请注意:Google Drive API 附加了 API 调用限制,每 100 秒内不能超过 100 次调用。

嗨罗宾,谢谢你的回答。我可以再问一个问题吗?这些登录凭据(将保存在settings.json中)从哪里获取? - mLC
嘿 @mLC,你是否从Google Cloud Console下载了client_secret_xxxxxxx.json文件(通常在用于PyDrive时重命名为client_secrets.json)?它是一个json格式的文件,包含了你应该需要的所有信息,用于settings.yaml文件。你可以使用这个文件作为模板。我刚刚注意到,在我的回答中我称其为settings.json,实际上它被称为settings.yaml - Robin Nabel
我有client_secret.json :) 但我猜问题在于我无法从服务器授权,因为我无法访问该命令行。 我认为流程如下:1)我将在本地计算机上进行授权2)我将获得一些包含我的授权信息的文件3)我将在“设置”文件中存储此授权信息4)我将上传此设置文件到服务器5)服务器上不再需要进行授权。 - mLC
太好了!看一下settings.yaml文件,里面有一个save_credentials_file:字段。你可以尝试:1)将save_credentials_file: creds.json添加进去;2)在本机上进行认证过程;3)将所有东西(包括creds.json文件 - 确保相对路径不变)复制到远程机器上。我没有试过,但应该可以按照你的需要工作:) - Robin Nabel
如果它有效,请告诉我们,这样我们就可以将此选项添加/修改到答案中。 - Robin Nabel
这是一个很好的解释。结合@wang892的回答以及https://dev59.com/L2Af5IYBdhLWcg3wqEHp和https://dev59.com/Sabja4cB1Zd3GeqPeE7b上的回答和评论,我们有了一些非常扎实的文档来说明如何让PyDrive工作!我认为这应该放在软件包文档中。 - avg

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接