【发布时间】:2018-07-23 21:01:29
【问题描述】:
我正在使用 Google API。我以this 为起点,here 是实际的 Python 代码。
我在 https://console.developers.google.com/apis/credentials 创建了一个 OAuth 2.0 客户端 ID,并将其下载为 client_secret.json,在代码中使用如下:
CLIENT_SECRETS_FILE = "client_secret.json"
def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_console()
return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
client_secret.json 的内容如下所示:
{
"installed": {
"client_id": "**REDACTED**",
"project_id": "api-project-1014650230452",
"auth_uri": "https:\/\/accounts.google.com\/o\/oauth2\/auth",
"token_uri": "https:\/\/accounts.google.com\/o\/oauth2\/token",
"auth_provider_x509_cert_url": "https:\/\/www.googleapis.com\/oauth2\/v1\/certs",
"client_secret": "**REDACTED**",
"redirect_uris": [
"urn:ietf:wg:oauth:2.0:oob",
"http:\/\/localhost"
]
}
}
整个程序运行正常,成功返回了一个有意义的数据集,但是每次运行程序都会提示如下:
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=... Enter the authorization code:
我输入了代码并且程序可以运行,但是每次程序运行时我都必须访问这个 URL 并获取一个新代码。我的印象是,client_secret.json 的存在正是为了避免这种必要性。
我必须做些什么才能让我的 CLI Python 程序使用 API 而不必每次都获取新的令牌?
【问题讨论】:
-
我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。
-
是的,这可以作为答案。我并不完全满意,因为它看起来像是一个 hack,而且因为看起来客户端机密文件应该是这样做的,这意味着我/我们可能仍然没有以正确的方式去做。但它有效。谢谢。
-
感谢您的回复。虽然我不确定我是否能正确理解您的情况,但使用 Service Accounts 怎么样?该文件是here。如果我误解了你的情况,我很抱歉。
标签: google-api