如何使用GData检索用户的电子邮件地址?

问题描述:

我正尝试使用GData检索刚刚使用Google OAuth授权我的网站的用户的电子邮件地址,真实姓名和个人资料网址。如何使用GData检索用户的电子邮件地址?

我们知道如何使用Google的OpenID流来请求它,但是OpenID流具有严重的局限性,我们必须要求Google Apps用户的域名,然后才能知道要将它们发送到哪里登录。至少使用OAuth(甚至AuthSub),用户会被提示要求登录哪个Google帐户。

仍然不清楚这是否可行,但我们现在通过使用OpenID流程解决此问题。随着他们的通用登录流量的增加,我们不再有理由避免他们的OpenID流量。

如果您获取用户的联系人摘要,则可以访问authors字段,该字段会为您提供电子邮件和姓名。此外,Feed的id字段似乎是拥有联系人的人的电子邮件地址。

一个例子(Scala中)与名称改变,假设的AuthSub的用户(对不起,我没有迁移我的代码到OAuth),您已经有了一个会话token

scala> val contacts_service = new ContactsService("foo") 
contacts_service: com.google.gdata.client.contacts.ContactsService = [email protected] 

scala> contacts_service.setAuthSubToken(token, null) 

scala> val feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full?max-results=10000") 
feedUrl: java.net.URL = https://www.google.com/m8/feeds/contacts/default/full?max-results=10000 

scala> val feed = contacts_service.getFeed(feedUrl, classOf[ContactFeed]) 
feed: com.google.gdata.data.contacts.ContactFeed = {ContactFeed [email protected]} 

scala> feed.getId 
res13: java.lang.String = [email protected] 

scala> val p = feed.getAuthors.head 
p: com.google.gdata.data.Person = [email protected] 

scala> p.getEmail 
res14: java.lang.String = [email protected] 

scala> p.getName 
res15: java.lang.String = Example User