我想通过google联系人API访问用户的联系人列表。我已经设法获得了令牌和刷新令牌,现在我正尝试在rails服务器上使用它。google-api-client
宝石似乎是一条路,但我找不到要使用哪个discovered_api
。Greg Baugues提供了一个很好的教程来让gmail API工作。一般的请求看起来像
client = Google::APIClient.new
client.authorization.access_token = user_token
service = client.discovered_api('gmail')
result = client.execute(
:api_method => service.users.labels.list,
:parameters => {'userId' => 'me'},
:headers => {'Content-Type' => 'application/json'})
pp JSON.parse(result.body)
但我找不到如何查询联系人。运行
client.discovered_apis.each do |gapi|
puts "#{gapi.title} t #{gapi.id} t #{gapi.preferred} n"
end
(从这里)现在显示了与联系人相关的API,我想知道这是否在gem的alpha版本中实现。。。
如@abraham所述,发现API不支持Google联系人API。以下是我如何使用宝石google_contacts_api
和oauth2
(感谢Rael Gugelmin Cunha将它们指向我)从访问令牌在ruby中完成的操作:
client = OAuth2::Client.new(client_id, client_secret, site: url)
token = OAuth2::AccessToken.new(client, access_token)
google_contacts_user = GoogleContactsApi::User.new(token)
contacts = google_contacts_user.contacts
可能有一些更优雅的方法可以做到这一点,但这很有效:)
Google联系人API基于Google较旧的GData API标准,不受发现API的支持。有一个相当广泛的指南为普通Ruby和一个辅助宝石。检索所有联系人并不提供Ruby示例,但Python示例应该很容易翻译。
def PrintAllContacts(gd_client):
feed = gd_client.GetContacts()
for i, entry in enumerate(feed.entry):
print 'n%s %s' % (i+1, entry.name.full_name.text)
if entry.content:
print ' %s' % (entry.content.text)
# Display the primary email address for the contact.
for email in entry.email:
if email.primary and email.primary == 'true':
print ' %s' % (email.address)