如何在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。)
文档中有一个错误。 groups
和contacts
是实现Enumerable的类的实例,它不提供[]
方法,但提供first
一种方法。
因此,尝试groups.first
而不是groups[0]
。 同样,使用contacts.first
而不是contacts[0]
。 我的错! (我可能在to_a
里做了一个to_a
。)
对更新的回应
要回答问题的后半部分,您似乎找到了Contact
和Group
的相关便捷方法,特别是Contact.primary_email
方法。 在(有点不完整,对不起)YARD文档中查看更多方法。
要获取所有电子邮件,您基本上需要迭代返回的联系人。 正如我在对问题第一部分的更新响应中所提到的, groups
和contacts
具有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将来,您可能希望打开一个新问题,而不是编辑现有问题。