我很难访问Google通讯录API。首先我尝试了google-api-ruby-client gem
但事实证明它不支持Contacts API
。
下一张照片是google_contacts_api gem。我使用oauth2
来访问身份验证密钥(Getting authentication token guide question)。但是在将令牌正确传递给api之后,它会产生错误。
`<main>': undefined method `[]' for #<GoogleContactsApi::GroupSet:0x000000039fcad8>` (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
建议它现在正在运作。但是小组联系人没有被打印出来。而是打印#<GoogleContactsApi::ContactSet:0x000000020e49d8>
。示例:此处是此代码打印的内容
groups = google_contacts_user.groups
# group methods
groups.each do |group|
group_contacts = group.contacts
puts group_contacts
end
输出:
#<GoogleContactsApi::ContactSet:0x000000020e49d8>
#<GoogleContactsApi::ContactSet:0x0000000504aec0>
#<GoogleContactsApi::ContactSet:0x0000000518dfd0>
#<GoogleContactsApi::ContactSet:0x000000052d9290>
#<GoogleContactsApi::ContactSet:0x000000054280d8>
#<GoogleContactsApi::ContactSet:0x0000000558c2f8>
#<GoogleContactsApi::ContactSet:0x00000005746eb8>
#<GoogleContactsApi::ContactSet:0x000000058a3ea0>
如何打印群组联系人?
答案 0 :(得分:2)
已编辑以添加有关Enumerable实施的信息
(我写了宝石。)
文档中存在错误。 groups
和contacts
是实现Enumerable的类的实例,它们不提供[]
方法,但提供first
方法。
因此,请尝试groups.first
而不是groups[0]
。同样,请使用contacts.first
代替contacts[0]
。我的错! (我可能在脑子里做了to_a
。)
对更新的回应
要回答问题的后半部分,您似乎找到了Contact
和Group
的相关便捷方法,尤其是Contact.primary_email
方法。 See more methods in the (somewhat incomplete, sorry) YARD docs.
要获取所有电子邮件,您基本上需要迭代返回的联系人。正如我在对问题第一部分的更新回复中提到的那样,groups
和contacts
拥有Enumerable
的所有方法。 (Enumerable documentation)。以下是一些例子:
# 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开始返回宝石还没有考虑的额外数据)。您描述的用例并不需要这样做。
P.S。将来,您可能想要打开一个新问题,而不是编辑现有问题。