Google api 如何使用Python Google API而不必每次都通过浏览器获取新的身份验证代码?
我正在玩谷歌API。我使用的作为起点,是实际的Python代码 我已经在创建了OAuth 2.0客户端ID,并将其下载为Google api 如何使用Python Google API而不必每次都通过浏览器获取新的身份验证代码?,google-api,Google Api,我正在玩谷歌API。我使用的作为起点,是实际的Python代码 我已经在创建了OAuth 2.0客户端ID,并将其下载为client\u secret.json,代码中使用该ID,如下所示: CLIENT_SECRETS_FILE = "client_secret.json" def get_authenticated_service(): flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPE
client\u secret.json
,代码中使用该ID,如下所示:
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\u 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"
]
}
}
整个程序工作正常,并成功返回有意义的数据集,但是,每次运行程序时,都会出现如下提示:
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)
我输入代码,程序就可以运行了,但是每次程序运行时,我都必须访问这个URL并获取新的代码。我的印象是,client\u secret.json
的存在正是为了防止这种情况发生
要使我的CLI Python程序使用API而不必每次都获取新的令牌,我必须做些什么?您希望运行脚本而不必每次都检索代码。如果我的理解是正确的,这次修改怎么样?在这个修改中,当脚本第一次运行时,刷新令牌被保存到“credential_sample.json”文件中。这样,从下一次运行开始,您可以使用刷新令牌检索的访问令牌来使用API。因此,不需要每次都检索代码 修改脚本: 请修改如下 发件人: 致: 注:
- 首次运行此操作时,浏览器将自动打开。当您授权作用域时,脚本会自动检索代码并创建“credential_sample.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)
from oauth2client import client # Added
from oauth2client import tools # Added
from oauth2client.file import Storage # Added
def get_authenticated_service(): # Modified
credential_path = os.path.join('./', 'credential_sample.json')
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRETS_FILE, SCOPES)
credentials = tools.run_flow(flow, store)
return build(API_SERVICE_NAME, API_VERSION, credentials=credentials)