【问题标题】:Python: Google Drive AuthentificationPython:谷歌驱动器认证
【发布时间】:2017-03-23 11:08:56
【问题描述】:

我的任务是连接到 Google Drive API(在PyDrive module 的帮助下)并下载一些文件。我设法让这个东西在我的本地计算机上运行 - 我在Google Console注册了我的“应用程序”,我下载了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#appSecret 来自oauth。


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

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

【问题讨论】:

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


    【解决方案1】:

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

    您正在寻找的是来自 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_xxxx.json中的client-secret等信息复制到settings.yaml文件中。
    4. 在我们的开发机器上执行身份验证过程 - 现在您的文件夹中应该有一个包含凭据的额外文件(例如 creds.json
    5. 将包含 a) 原始脚本、b) settings.yaml 文件和 c) 生成的 creds.json 文件的整个目录复制到远程计算机。确保相对路径不会改变。
    6. 利润?

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

    【讨论】:

    • 嗨罗宾,感谢您的回答。我可以再问一个问题吗?从哪里获取这些登录凭据(将保存在 settings.json 中)?
    • 嘿@mlC,您是否从 Google Cloud Console 下载了 client_secret_xxxxxxx.json 文件(通常在用于 PyDrive 时重命名为 client_secrets.json)?这是一个 json 格式的文件,其中包含 settings.yaml 文件所需的所有信息。您可以使用this file 作为模板。也只是注意到我在回答中将其称为settings.json,实际上称为settings.yaml
    • 我有client_secret.json :) 但我想这里的问题是我无法从服务器授权,因为我无法访问该命令行。我虽然过程如下:1)我将在我的本地计算机上授权 2)我将获得一些包含我的身份验证信息的文件 3)我将将此身份验证信息存储在 settings 文件中 4)我将上传此设置文件到服务器上 5) 不再需要服务器上的身份验证。
    • 太棒了!看看settings.yaml,有一个save_credentials_file: 字段。您可以尝试 1) 放置 save_credentials_file: creds.json,2) 在本地计算机上执行身份验证过程,3) 将所有内容(包括 creds.json 文件 - 确保相对路径不会更改)复制到远程计算机。还没有尝试过,但它应该可以按您的需要工作:)
    • 如果可行,请告诉我们,以便我们修改/添加此选项到答案中。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多