如何在ruby中访问Google Contacts API

我正在努力访问Google Contacts API。首先我尝试了google-api-ruby-client gem但事实certificate它不支持Contacts API

下一个镜头是google_contacts_apigem 。 我使用oauth2来访问身份validation密钥( 获取身份validation令牌指南问题 )。 但是在将令牌正确传递给api之后,它产生了一个错误。

 `': undefined method `[]' for #` (NoMethodError). 

这是我的代码。

 # get token using oauth2 gem, and use it below in the google_contacts_api. google_contacts_user = GoogleContactsApi::User.new(token) contacts = google_contacts_user.contacts groups = google_contacts_user.groups # group methods group = groups[0] group.contacts puts group.contacts # contact methods puts contacts.count puts groups.count contact = contacts[0] contact.primary_email contact.emails 

我究竟做错了什么?

更新:

正如@alvin建议它现在正在运作。 但是小组联系人没有被打印出来。 而是打印# 。例如:这是此代码打印的内容

 groups = google_contacts_user.groups # group methods groups.each do |group| group_contacts = group.contacts puts group_contacts end 

输出:

 # # # # # # # # 

如何打印群组联系人?

编辑以添加有关Enumerable实现的信息

(我写了gem。)

文档中有一个错误。 groupscontacts是实现Enumerable的类的实例,它不提供[]方法,但提供first一种方法。

因此,尝试groups.first而不是groups[0] 。 同样,使用contacts.first而不是contacts[0] 。 我的错! (我可能在to_a里做了一个to_a 。)


对更新的回应

要回答问题的后半部分,您似乎找到了ContactGroup的相关便捷方法,特别是Contact.primary_email方法。 在(有点不完整,对不起)YARD文档中查看更多方法。

要获取所有电子邮件,您基本上需要迭代返回的联系人。 正如我在对问题第一部分的更新响应中所提到的, groupscontacts具有Enumerable所有方法。 ( 可列举的文件 )。 这里有些例子:

 # What are all the groups called? user.groups.map(&:title) # Find group by title. (Returns nil if no such group.) group = user.groups.select { |g| g.title = "Group Name" } # Get all primary emails from a group group.contacts.map(&:primary_email) # Get all primary emails from all contacts regardless of group user.contacts.map(&:primary_email) 

当没有提供便利访问器时,您只需要使用Hashie::Mash方法来访问数据(例如,如果Google开始返回gem尚未考虑的额外数据)。 您描述的用例不需要这样。

PS将来,您可能希望打开一个新问题,而不是编辑现有问题。