我启用了Gmail API,并下载了包含令牌的.json文件。我将其放置在脚本所在的文件夹中。当我尝试运行它时,出现此错误:
Traceback (most recent call last):
File "email_clean.py", line 14, in <module>
creds = store.get()
File "C:\Python27\lib\site-packages\oauth2client\client.py", line 407, in get
return self.locked_get()
File "C:\Python27\lib\site-packages\oauth2client\file.py", line 54, in locked_get
credentials = client.Credentials.new_from_json(content)
File "C:\Python27\lib\site-packages\oauth2client\client.py", line 302, in new_from_json
module_name = data['_module']
KeyError: '_module'
我知道,关于同一问题,还有其他一些问题,但是这些解决方案对我没有帮助。 token.json文件与脚本位于同一文件夹中,并且据我所知,URL似乎拼写正确。 JSON文件的格式正确。任何帮助将不胜感激。
这是脚本:
"""
Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# Setup the Gmail API
SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('gmail', 'v1', http=creds.authorize(Http()))
# Call the Gmail API
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
if not labels:
print('No labels found.')
else:
print('Labels:')
for label in labels:
print(label['name'])
答案 0 :(得分:0)
没有找到/读取您的token.json
文件。 (您可以查看该文件,并看到它的第一行应显示为:
{"_module": "oauth2client.client",
...
简单的解决方法(假设您的文件具有正确的信息)是将完整的绝对路径名传递给file.Storage()
,而不只是文件名。
在您的情况下,您说json文件以
开头{"installed": {"client_id": ...
那是您的客户端机密json文件,而不是凭据json-您需要使用前者来获取后者。该文件(带有"installed"
)是您对client.flow_from_clientsecrets()
的调用使用的文件。成功后,将按file.Storage()
所示写入文件,并且在后续尝试中,该流将在令牌文件中查找并在其中使用信息(而不是clientsecrets)。
修复可能很简单,只要确保您的token.json文件在首次尝试时不存在,便会尝试执行流程并重新创建文件。
关于流程的一个很好的解释是:Ashok Yogi's A beginners guide to Google OAuth and Google APIs
答案 1 :(得分:0)
弄清楚了。问题是我将.json文件另存为token.json,但没有意识到这是一个在进行身份验证后被创建的文件。技巧是删除token.json,然后从开发人员控制台将.json文件另存为凭据.json。