Rails 3使用omniauth获取gmail联系人?

我使用omniauth成功登录谷歌凭据? omn​​iauth提供uid作为以下链接

https://www.google.com/accounts/o8/id?id=xxxxxxxxxx

通过使用上面的链接可以获得gmail联系人或他们以任何其他方式获得gmail联系

不,Omniauth只提供身份validation。

有一个gem可能对你有意思: https : //github.com/cardmagic/contacts

Quote:“联系人是一个通用界面,可以从各种提供商处获取联系人列表信息,包括Hotmail,AOL,Gmail,Plaxo和Yahoo。”

编辑:看看这篇博客文章: http : //rtdptech.com/2010/12/importing-gmail-contacts-list-to-rails-application/

从这里获取client_id和client_secret。 这是粗略的脚本,完美无缺。 根据您的需要对其进行修改。

require 'net/http' require 'net/https' require 'uri' require 'rexml/document' class ImportController < ApplicationController def authenticate @title = "Google Authetication" client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com" google_root_url = "https://accounts.google.com/o/oauth2/auth?state=profile&redirect_uri="+googleauth_url+"&response_type=code&client_id="+client_id.to_s+"&approval_prompt=force&scope=https://www.google.com/m8/feeds/" redirect_to google_root_url end def authorise begin @title = "Google Authetication" token = params[:code] client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com" client_secret = "xxxxxxxxxxxxxx" uri = URI('https://accounts.google.com/o/oauth2/token') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(uri.request_uri) request.set_form_data('code' => token, 'client_id' => client_id, 'client_secret' => client_secret, 'redirect_uri' => googleauth_url, 'grant_type' => 'authorization_code') request.content_type = 'application/x-www-form-urlencoded' response = http.request(request) response.code access_keys = ActiveSupport::JSON.decode(response.body) uri = URI.parse("https://www.google.com/m8/feeds/contacts/default/full?oauth_token="+access_keys['access_token'].to_s+"&max-results=50000&alt=json") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) contacts = ActiveSupport::JSON.decode(response.body) contacts['feed']['entry'].each_with_index do |contact,index| name = contact['title']['$t'] contact['gd$email'].to_a.each do |email| email_address = email['address'] Invite.create(:full_name => name, :email => email_address, :invite_source => "Gmail", :user_id => current_user.id) # for testing im pushing it into database.. end end rescue Exception => ex ex.message end redirect_to root_path , :notice => "Invite or follow your Google contacts." end end 

设置截图。

在此处输入图像描述