python - googleapi python如何获取/刷新访问令牌
问题描述
我正在尝试将 Google Analytics 设置到我的博客网站之一。我正在使用 google api 客户端库。如果我从站点手动获取访问令牌,则代码可以正常工作:https://developers.google.com/oauthplayground/。我发现刷新 access_token 很困难。有人可以指导我吗,因为我对 Google Analytics 很陌生。请分享python代码片段。
import httplib2
import httplib2 as lib2
import google.oauth2.credentials
# from google.auth.transport import requests
import requests
from google_auth_httplib2 import AuthorizedHttp
from oauth2client import client, GOOGLE_TOKEN_URI
from googleapiclient.discovery import build as google_build
# This is consistent for all Google services
token_uri = 'https://accounts.google.com/o/oauth2/token'
# WORKING CODE BUT REQUIRES VALID ACCESS_TOKEN
credentials = google.oauth2.credentials.Credentials(None,
refresh_token=refresh_token,
token_uri='https://accounts.google.com/o/oauth2/token',
client_id=client_id,
client_secret=client_secret)
credentials = google.oauth2.credentials.Credentials(access_token)
authorized = AuthorizedHttp(credentials=credentials)
print(access_token)
# API Name and Verison, these don't change until
# they release a new API version for us to play with.
api_name = 'analyticsreporting'
api_version = 'v4'
# Let's build the client
api_client = google_build(serviceName=api_name, version=api_version, http=authorized)
sample_request = {
'viewId': 'xxxxxxxx',
'dateRanges': {
'startDate': datetime.strftime(datetime.now() - timedelta(days=120), '%Y-%m-%d'),
'endDate': datetime.strftime(datetime.now(), '%Y-%m-%d')
},
'dimensions': [{'name': 'ga:date'}],
'metrics': [{'expression': 'ga:sessions'}]
}
response = api_client.reports().batchGet(
body={
'reportRequests': sample_request
}).execute()
print(response)
我将 ACCESS_TOKEN 保留为 none 以获取初始访问令牌,当我打印它时,这似乎有效,但我无法使用此凭证 api 刷新此 access_token,因为它也没有 expires_at 或 expiry 属性. URL 范围将是“ https://www.googleapis.com/auth/analytics.readonly ”
运行上述代码刷新 ACCESS TOKEN 时,出现错误:
Traceback (most recent call last):
File "E:/PyCharm_Workspace/MLPractices/GA3.py", line 78, in <module>
'reportRequests': sample_request
File "E:\PyCharm_Workspace\MLPractices\venv\lib\site-packages\googleapiclient\_helpers.py", line 134, in positional_wrapper
return wrapped(*args, **kwargs)
File "E:\PyCharm_Workspace\MLPractices\venv\lib\site-packages\googleapiclient\http.py", line 901, in execute
headers=self.headers,
File "E:\PyCharm_Workspace\MLPractices\venv\lib\site-packages\googleapiclient\http.py", line 177, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "E:\PyCharm_Workspace\MLPractices\venv\lib\site-packages\google_auth_httplib2.py", line 213, in request
self.credentials.refresh(self._request)
File "E:\PyCharm_Workspace\MLPractices\venv\lib\site-packages\google\oauth2\credentials.py", line 172, in refresh
"The credentials do not contain the necessary fields need to "
google.auth.exceptions.RefreshError: The credentials do not contain the necessary fields need to refresh the access token. You must specify refresh_token, token_uri, client_id, and client_secret.
提前致谢
尤瓦
解决方案
谢谢你们。可以通过使用服务帐户凭据而不是 OAUTH - client_secrets 来获取 google 分析访问权限。使用服务帐户似乎很简单,因为现在我不需要刷新任何令牌。
但我在想哪个更好,更安全,请有任何想法。这也是访问 Google Analytics V4 的最新参考,已于 2020 年发布参考:https ://www.jcchouinard.com/google-analytics-api-using-python/
推荐阅读
- javascript - 单击链接后,通过 JavaScript 重新加载页面继续一次
- python - 如何使用以下 DataFrame 创建字典
- c# - 32 位客户端和 64 位服务器之间的免注册 COM 互操作
- asp.net - 允许未经身份验证访问 ASP.NET web.config 中的某些文件类型,无论其位置如何
- python - 如果他们第一次弄错了,有没有办法不给分,测验,python
- python - 如何将 df 值与列表的元素进行比较,并用这些值制作 df?
- python - 如何让 pylint 在全局范围内忽略单个模块的未使用导入?
- python - 如何从 SQL Server 表中提取日期并将其存储在 Pandas 的变量中,没有噪音,只有日期
- floating-point - 如何在不使用宏或反复试验的情况下找到用于浮点数的基数
- c# - C# Coverlet 结果始终为空