【发布时间】:2019-03-31 09:51:13
【问题描述】:
我正在开发一个小型网络应用程序来帮助我管理我的 gmail。我已经使用通过django-allauth 收到的OAuth 令牌通过Google 的API 使用以下功能进行了设置。
import google.oauth2.credentials
from .choices import GMAIL
from allauth.socialaccount.models import SocialToken, SocialAccount
from apiclient.discovery import build
def get_credentials(user):
account = SocialAccount.objects.get(user=user.id)
token = SocialToken.objects.get(app=GMAIL, account=account).token
credentials = google.oauth2.credentials.Credentials(token)
service = build('gmail', 'v1', credentials=credentials)
return service
这有时似乎有效,但不幸的是,它不是很可靠。它在build() 函数中经常超时,只有大约三分之一的时间成功。我想知道什么会导致这种行为,是否有更可靠的方式来访问 API?
我从these docs 中找到了以下AuthorizedSession 类:
from google.auth.transport.requests import AuthorizedSession
authed_session = AuthorizedSession(credentials)
response = authed_session.request(
'GET', 'https://www.googleapis.com/storage/v1/b')
但我不知道如何将其转换为可与 Google API 配合使用的对象:
def get_labels(user):
service = get_credentials(user)
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
return labels
不幸的是,Google's docs 建议使用我希望避免的已弃用包。
这是我第一次真正使用 OAuth 强制 API。有人有什么建议吗?
编辑:我从我的 Macbook 尝试后发布。我也在我的 Windows 机器上尝试过它,它的工作更稳定,但每次只需要大约 20 秒就可以完成build()。我觉得我做错了什么。
【问题讨论】:
标签: django google-api google-oauth django-allauth google-python-api