Python:Google 驱动器身份验证
Python: Google Drive Authentification
我的任务是连接到 Google 驱动器 API(在 PyDrive module) and download some files. I somehow managed to get this thing working on my local computer - I registered my "app" at the Google Console 的帮助下,我下载了 client_secret.json
、运行 脚本,身份验证 window 弹出,我使用我的 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
,我可以将其传递给应用程序(例如,作为字符串参数)。然后该应用程序连接到我的云端硬盘并下载所需的文件。
您需要通过身份验证才能访问某人的私人驱动器帐户。一旦他们授予您访问权限,他们将必须在第一次通过网络浏览器执行此操作,您应该只保存上面的刷新令牌。刷新令牌将使您能够在需要时从服务器端脚本访问他们的数据。参见:Python Quickstart
如果您只能访问您个人控制的驱动器帐户,请查看使用 OAuth 2.0 进行服务器到服务器应用程序的服务帐户
编辑:请参阅预授权服务器应用程序的编辑。
您正在寻找的是来自 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.
当您运行服务器上的脚本时,它会要求您将link复制粘贴到您的本地浏览器中。使用特定帐户登录后,您将获得一串看似随机的字母和数字。将该字符串粘贴到您的控制台中,您应该可以开始了。
由于您可能不希望每次执行脚本 运行 时都这样做,请考虑向您的项目添加一个 settings.yaml
文件,这样您就可以保存登录凭据。有关如何设置的详细信息,请参阅 docs.
编辑: 如果您想在没有进一步身份验证的情况下将 PyDrive 脚本分发到任何服务器,您必须:
- 下载
client_secret_xxxxx.json
- 将
settings.yaml
文件添加到您的项目中,请参阅此 template。确保 save_credentials_file:
已设置,例如creds.json
- 将
client_secret_xxxx.json
中的client-secret
等信息复制到settings.yaml
文件中。
- 在我们的开发机器上完成身份验证过程 - 现在您的文件夹中应该有一个包含凭据的额外文件(例如
creds.json
)
- 将包含 a) 原始脚本、b)
settings.yaml
文件和 c) 生成的 creds.json
文件的整个目录复制到远程计算机。确保相对路径不变。
- 利润?
注意:Google 驱动器 API 附加了 API 调用限制,防止在 100 秒内调用超过 100 个。
我的任务是连接到 Google 驱动器 API(在 PyDrive module) and download some files. I somehow managed to get this thing working on my local computer - I registered my "app" at the Google Console 的帮助下,我下载了 client_secret.json
、运行 脚本,身份验证 window 弹出,我使用我的 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
,我可以将其传递给应用程序(例如,作为字符串参数)。然后该应用程序连接到我的云端硬盘并下载所需的文件。
您需要通过身份验证才能访问某人的私人驱动器帐户。一旦他们授予您访问权限,他们将必须在第一次通过网络浏览器执行此操作,您应该只保存上面的刷新令牌。刷新令牌将使您能够在需要时从服务器端脚本访问他们的数据。参见:Python Quickstart
如果您只能访问您个人控制的驱动器帐户,请查看使用 OAuth 2.0 进行服务器到服务器应用程序的服务帐户
编辑:请参阅预授权服务器应用程序的编辑。
您正在寻找的是来自 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.
当您运行服务器上的脚本时,它会要求您将link复制粘贴到您的本地浏览器中。使用特定帐户登录后,您将获得一串看似随机的字母和数字。将该字符串粘贴到您的控制台中,您应该可以开始了。
由于您可能不希望每次执行脚本 运行 时都这样做,请考虑向您的项目添加一个 settings.yaml
文件,这样您就可以保存登录凭据。有关如何设置的详细信息,请参阅 docs.
编辑: 如果您想在没有进一步身份验证的情况下将 PyDrive 脚本分发到任何服务器,您必须:
- 下载
client_secret_xxxxx.json
- 将
settings.yaml
文件添加到您的项目中,请参阅此 template。确保save_credentials_file:
已设置,例如creds.json
- 将
client_secret_xxxx.json
中的client-secret
等信息复制到settings.yaml
文件中。 - 在我们的开发机器上完成身份验证过程 - 现在您的文件夹中应该有一个包含凭据的额外文件(例如
creds.json
) - 将包含 a) 原始脚本、b)
settings.yaml
文件和 c) 生成的creds.json
文件的整个目录复制到远程计算机。确保相对路径不变。 - 利润?
注意:Google 驱动器 API 附加了 API 调用限制,防止在 100 秒内调用超过 100 个。