Python Google API quickstart.py error key错误:'_模块';
使用Gmail API。我的客户机机密文件已下载并为Ruby工作。当我尝试quickstart.py(python)版本时,我遇到了这个错误Python Google API quickstart.py error key错误:'_模块';,python,google-api,gmail-api,Python,Google Api,Gmail Api,使用Gmail API。我的客户机机密文件已下载并为Ruby工作。当我尝试quickstart.py(python)版本时,我遇到了这个错误 File "quickstart.py", line 70, in <module> main() File "quickstart.py", line 55, in main credentials = get_credentials() File "quickstart.py", line 38, in get_cr
File "quickstart.py", line 70, in <module>
main()
File "quickstart.py", line 55, in main
credentials = get_credentials()
File "quickstart.py", line 38, in get_credentials
credentials = store.get()
File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 374, in get
return self.locked_get()
File "/Library/Python/2.7/site-packages/oauth2client/file.py", line 79, in locked_get
credentials = Credentials.new_from_json(content)
File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 281, in new_from_json
module = data['_module']
KeyError: '_module'
文件“quickstart.py”,第70行,在
main()
文件“quickstart.py”,第55行,主
凭证=获取凭证()
get_凭证中第38行的文件“quickstart.py”
凭据=store.get()
get中第374行的文件“/Library/Python/2.7/site packages/oauth2client/client.py”
返回self.locked_get()
文件“/Library/Python/2.7/site packages/oauth2client/File.py”,第79行,在locked_get中
credentials=凭据。从\u json(内容)中新建\u
文件“/Library/Python/2.7/site packages/oauth2client/client.py”,第281行,以新的形式,从_json开始
模块=数据[''模块']
KeyError:“\u模块”
我根本没有更改该文件,只是将client_secret.json添加到该工作目录中,并安装了GoogleAPI python客户端。我的python代码来自这里:oauth2client试图从结构不正确的json文件加载凭据 也许Ruby客户端使用不同的文件格式,但我会感到惊讶。你确定你没有意外地将
client\u secret.json
保存为~/.credentials/gmail quickstart.json
无论如何,删除
~/.credentials/gmail quickstart.json
并重新身份验证将生成一个具有正确结构的新凭据文件。我自己也在学习Python,遇到了类似的问题,但使用了。事实证明,这是一个关于范围的打字错误
## Typo - Invalid definition
SCOPES = 'https://ww.googleapies.com/auth/calendar.readonly'
## Correct Value for SCOPE
SCOPES = 'https://www.googleapis.com/auth/calendar'
此外,马特的回答也为我指明了正确的方向。gmail-quickstart.json与client_secret.json不同。client_secret.json允许您请求OAuth2令牌。而gmail-quickstart.json包含发布的令牌和与之相关的元数据。gmail-quickstart.json只有在您成功登录后才会创建
最后一个想法是,为了成功登录,quickstart.py应用程序启动了我的web浏览器(Firefox)的一个实例,并进入Google登录屏幕。为了让Firefox正常运行,我必须首先正确设置显示变量
$ export DISPLAY=:0
$ xhost +
access control disabled, clients can connect from any host
我通过将client_secret.json移动到与试图读取它的py文件(quickstart.py)相同的目录来解决这个问题,我的在桌面上,而我已经将json保存到了文档中。我也把json保存到桌面上了,天哪,它飞了
我不知道为什么当它们位于不同的目录中时它不起作用,定义自定义凭据路径没有帮助。尝试暂时将
creds=store.get()
替换为creds=None
。如果这样做有效,您可以重构代码,以始终从基于流的凭据实例化开始。这对我有用。Google示例似乎与其oauth2client不同步。我遵循了下面列出的几个建议:
- 按照simic0de的建议,将client_secret.json移动到与试图读取它的py文件相同的目录中
- 使用Skill idea,我决定处理异常,而不是完全消除“credentials=store.get()”,因此它可以用于基于流的凭据实例化
try:
credentials = store.get()
except:
print('Working with flow-based credentials instantiation')
您可以在except行中编写自己的代码。这种方法将允许store.get()命令在满足条件时工作。在这个GitHub问题中:
2016年1月10日回复:
如果有人有相同的问题:auth_token.txt
和client_secret.json
不一样!不要从谷歌API控制台链接客户端\u secret.json
。该文件将由脚本自动创建
错误方式:gauth.SaveCredentialsFile(“client\u secret.json”)
正确的方式:gauth.SaveCredentialsFile(“.json”)
额外:
PyDrive代码,用于自动执行google drive api验证。只需使用浏览器一次即可进行身份验证,以后不再使用。它将您的凭证数据保存在mycreds.json
:)
从pydrive.auth导入GoogleAuth
从pydrive.drive导入GoogleDrive
gauth=GoogleAuth()
LoadCredentialsFile(“mycreds.json”)
如果gauth.credentials为无:
gauth.LocalWebserverAuth()
elif gauth.access\u令牌\u已过期:
高思
其他:
gouth.授权
SaveCredentialsFile(“mycreds.json”)
有适合您的解决方案吗?我对键错误有相同的问题:“\u module”
显然是因为存储了无效的OAuth2凭据(即ServiceAccounts)。在使用单独的分支进行本地测试并与生产合并时发生。如果有帮助的话。有帮助的解释+1我刚刚使用了Google给我的确切结构,文件仍然不会被接受-还有什么建议吗?重新验证,它会给你一个“client_secrets.json”,会使“credentials.json”中的数据无效;您必须在运行任何操作之前删除它。如果您有一个“settings.yaml”文件,则需要更新“client\u config:”数据以对应于新的“client\u id”和“client\u secret”。