Google api 如何使用Python Google API而不必每次都通过浏览器获取新的身份验证代码?

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

我正在玩谷歌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, 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)