我正在开发一个小网络应用程序来帮助我管理我的 gmail。我已经通过 Google 的 API 使用我通过django-allauth
.
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?
我从这些文档中找到了以下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 的文档建议使用我希望避免的已弃用包。
这是我第一次真正使用 OAuth 强制 API。有人有建议吗?
编辑:我从我的 Macbook 尝试后发布。我也在我的 Windows 机器上尝试过它,它的工作更一致,但每次只需要大约 20 秒才能完成build()
. 我觉得我做错了什么。