我正在尝试将Google Analytics(分析)设置为我的一个博客网站。我正在使用google api客户端库。如果我从以下站点手动获取访问令牌,则代码工作正常:https://developers.google.com/oauthplayground/。我发现很难刷新access_token。有人可以为我提供指导吗?请分享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保持为空以获取初始访问令牌,在我打印它时似乎可行,但是我无法使用此凭据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.
预先感谢
Yuva
答案 0 :(得分:0)
您将首次获得带有访问令牌的刷新令牌。您的刷新令牌寿命很长。因此,您可以将其存储到数据库中的某个位置,以便以后使用。每当您需要访问令牌时,请使用该刷新令牌并生成新的令牌。
Google API: getting Credentials from refresh token with oauth2client.client
上面的链接将为您提供帮助。
答案 1 :(得分:0)
谢谢大家。可以使用服务帐户凭据(而不是OAUTH)来获取Google Analytics(分析)访问权限-client_secrets。使用服务帐户似乎很简单,因为现在我不需要刷新任何令牌。
但是,我在想任何一种想法,哪个更好,更安全。这也是访问Google Analytics(分析)V4的最新参考,于2020年发布。参考:https://www.jcchouinard.com/google-analytics-api-using-python/