2016-02-12 91 views
2

我正在用gmail api编写一个程序,我遇到的一个问题是获取当前授权用户的电子邮件地址。我认为我可以在http://www.hackviking.com/development/python-get-user-info-after-oauth/范围内使用https://www.googleapis.com/auth/userinfo.email,但是当我在Google的OAuth Playground中尝试这种方式时,它会要求获得“知道您在Google上的人员”的权限以及查看您的电子邮件地址的权限。该程序不需要知道用户的名称/信息等,它只需要电子邮件地址。使用Google API获取用户电子邮件的最佳方式是什么?

我甚至想要使用userinfo.email范围的原因是因为看了一段时间后,我无法在gmail范围内找到获取用户电子邮件的方法,但是如果有一种方法会更好。

回答

4

你可以使用getProfile - 方法,为此,你需要下列范围之一:

https://mail.google.com/ 
https://www.googleapis.com/auth/gmail.modify 
https://www.googleapis.com/auth/gmail.compose 
https://www.googleapis.com/auth/gmail.readonly 

然后,你可以得到的电子邮件地址:

请求

GET https://www.googleapis.com/gmail/v1/users/me/profile?fields=emailAddress&access_token={ACCESS_TOKEN} 

回应

{ 
"emailAddress": "[email protected]" 
} 

在Python,这将是这样的:

profile = gmail_service.users().getProfile(userId='me').execute() 

print 'Email address of user is: %s' % profile['emailAddress'] 
+0

太感谢你了,这正是我想要的。还有一个问题,你知道是否有一种方法可以让我在Python中使用api执行此操作,还是需要使用httplib或其他方法来执行GET请求? – sfirrin

+1

@ sj-f没问题! [Gmail的Python API客户端库]中有一个方法(https://developers.google.com/resources/api-libraries/documentation/gmail/v1/python/latest/gmail_v1.users.html#getProfile),如果您不介意获取整个配置文件,而不仅仅是电子邮件地址。但这并不是那么多的数据,所以这应该很好。 – Tholle

+0

再次感谢我现在正在工作,但我遇到了另一个问题。现在我的地址是'address = gmail_service.users()。getProfile(userId ='me')'我尝试将它解析为JSON,但控制台告诉我这是一个HTTPRequest类型的对象,我无法使用它作为json.load()的参数。 api文档说它会返回一个具有这些属性的对象,但我无法弄清楚如何从请求中获取对象。 – sfirrin

相关问题