我正在尝试编写一个 Django 应用程序,它在特定的 Google 日历中创建事件。到目前为止,我已经成功了。只有一个小问题:
我不知道如何使用 google python 客户端获取刷新令牌。
结果是,在我的令牌过期后,应用程序无法运行,我必须创建一个新令牌。如果我理解文档正确,那就是刷新令牌的来源。
访问令牌的生命周期有限,在某些情况下,应用程序需要在单个访问令牌的生命周期之外访问 Google API。在这种情况下,您的应用程序可以获得所谓的刷新令牌。刷新令牌允许您的应用程序获取新的访问令牌。
Google 文档(参见“基本步骤”,第 4 节)
我的代码
import gflags
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
FLAGS = gflags.FLAGS
FLOW = OAuth2WebServerFlow(
client_id=GOOGLE_API_CLIENT_ID,
client_secret=GOOGLE_API_CLIENT_SECRET,
scope=GOOGLE_API_CALENDAR_SCOPE,
user_agent=GOOGLE_API_USER_AGENT)
storage = Storage(GOOGLE_API_CREDENTIAL_PATH)
credentials = storage.get()
if credentials is None or credentials.invalid == True:
credentials = run(FLOW, storage)
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='calendar', version='v3', http=http,
developerKey=GOOGLE_API_DEVELOPER_KEY)
event = {
[... Dictionary with all the necessary data here ...]
}
created_event = service.events().insert(calendarId=GOOGLE_API_CALENDAR_ID, body=event).execute()
这几乎是 Google 文档中的示例。有趣的是Storage。这是一个保存一些凭证数据的文件。
我的存储文件内容:
{
"_module": "oauth2client.client",
"_class": "OAuth2Credentials",
"access_token": [redacted],
"token_uri": "https://accounts.google.com/o/oauth2/token",
"invalid": true,
"client_id": [redacted],
"client_secret": [redacted],
"token_expiry": "2011-12-17T16:44:15Z",
"refresh_token": null,
"user_agent": [redacted]
}
那里应该有一个刷新令牌,但它是null。所以我想我可以以某种方式请求刷新令牌。
我将不胜感激有关如何使其正常工作的任何帮助。如果您需要更多信息,请告诉我。