我正在尝试使用 GData 检索刚刚使用 Google OAuth 授权我的网站的用户的电子邮件地址、真实姓名和个人资料 URL。
我们知道如何使用 Google 的 OpenID 流程来请求它,但是 OpenID 流程有一个严重的限制,即我们必须先询问 Google Apps 用户的域,然后才能知道将他们发送到哪里登录。至少使用 OAuth(甚至是 AuthSub) ,系统会提示用户登录哪个 Google 帐户。
仍然不清楚这是否可行,但我们现在通过使用 OpenID 流程来解决它。随着他们的通用登录流程的添加,我们不再有理由避免他们的 OpenID 流程。
如果您获取用户的联系人提要,您可以访问authors
为您提供电子邮件和姓名的字段。此外,提要的id
字段似乎是拥有联系人的人的电子邮件地址。
一个名称更改的示例(在 Scala 中),假设您已经有一个会话的 AuthSub 用户(对不起,我没有将我的代码迁移到 OAuth)token
:
scala> val contacts_service = new ContactsService("foo")
contacts_service: com.google.gdata.client.contacts.ContactsService = com.google.gdata.client.contacts.ContactsService@3fd1acee
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 com.google.gdata.data.contacts.ContactFeed@271a95f8}
scala> feed.getId
res13: java.lang.String = user@example.com
scala> val p = feed.getAuthors.head
p: com.google.gdata.data.Person = com.google.gdata.data.Person@513b4686
scala> p.getEmail
res14: java.lang.String = user@example.com
scala> p.getName
res15: java.lang.String = Example User