在 Rails Ruby 中通过 API 创建 Google 联系人

Create Google Contact through API in Ruby On Rails

我需要一些有关 Google 集成的帮助。

我需要通过 Google 联系人 API 创建 google 联系人,但我能找到的所有 gem 都只能获取内容,而且看起来也像Google 联系人 API 不支持 JSON 个帖子,仅 xml/atom.

这就是我的

Gemfile

gem 'google-api-client'

google_contacts_controller.rb

require 'google/apis/people_v1'
require 'google/api_client/client_secrets'

class GoogleContactsController < ApplicationController

  def auth
    client_secrets = Google::APIClient::ClientSecrets.load('app/controllers/google_contacts/client_secret.json')
    auth_client = client_secrets.to_authorization
    auth_client.update!(
      :scope => 'https://www.google.com/m8/feeds/',
      :redirect_uri => 'http://localhost:3000/google_contacts/auth')[]
    if request['code'] == nil
      auth_uri = auth_client.authorization_uri.to_s
      redirect_to auth_uri
    else
       auth_client.code = request['code']
       auth_client.fetch_access_token!
       auth_client.client_secret = nil
       _auth_client(auth_client)
       redirect_to action: 'sync_contacts'
    end
  end

  def sync_contacts
    unless session.has_key?(:credentials)
      _auth_client
      unless session.has_key?(:credentials)
        redirect action: 'auth'
      end
    end
   client_opts = JSON.parse(session[:credentials])

   auth_client = Signet::OAuth2::Client.new(client_opts)

   people_service = Google::Apis::PeopleV1::PeopleServiceService.new
   people_service.authorization = auth_client

   response = people_service.list_person_connections('people/me', request_mask_include_field: %w'person.names', page_size: 10,)
   remote_name_arry = response.connections.map{|person| person.names[0].display_name}

    redirect_to action: 'done', message: 'Synced Contacts'
  end

  def done
    @message = params[:message]
  end

  private
  def _auth_client(auth_client=nil)
    if auth_client
      credentials = GoogleContactCredential.new
      credentials.authorization_uri = auth_client.authorization_uri
      credentials.token_credential_uri = auth_client.token_credential_uri
      credentials.client_id = auth_client.client_id
      credentials.scope = "[#{auth_client.scope.join(', ')}]"
      credentials.redirect_uri = auth_client.redirect_uri
      credentials.expiry = auth_client.expiry
      credentials.expires_at = auth_client.expires_at
      credentials.access_token = auth_client.access_token
      if credentials.save
        session[:credentials] = credentials.to_json
      end
    else
      credentials = GoogleContactCredential.first
      if credentials.present?
        session[:credentials] = credentials.to_json
      end
    end
    credentials
  end
end

一切正常,我可以获取所有联系人,但我找不到使用此 gem 或另一个 gem 或 JSON 创建联系人的方法。

有没有人遇到过这个问题,请指出正确的方向。

更新

我也试过使用 google_contacts_api gem 没有成功。

这是我的

Gemfile

gem 'google_contacts_api'

google_contacts_controller.rb

def sync_contacts
  unless session.has_key?(:credentials)
    _auth_client
    unless session.has_key?(:credentials)
      redirect action: 'auth'
    end
  end
  client_opts = JSON.parse(session[:credentials])

  auth = OAuth2::Client.new(client_opts['client_id'], client_opts['client_secret'], client_opts)

  token = OAuth2::AccessToken.new(auth, client_opts['access_token'])

  google_contacts_user = GoogleContactsApi::User.new(token)
  contacts = google_contacts_user.contacts

  contact = contacts.first

  logger.info contact.title

  new_group = google_contacts_user.create_group('New group')

  redirect_to action: 'done', message: 'Synced Contacts'
end

一切正常,直到这一行(我从为 gem 提供的示例中得到):

new_group = google_contacts_user.create_group('New group')

然后我得到这一行异常:

undefined method `create_group' for #<GoogleContactsApi::User:0x007ff2da2291b8>

有人能发现我犯的错误吗?

此外,我将如何继续创建联系人,因为我似乎找不到关于实际创建和更新联系人的文档或帖子,我想也许我必须创建一个群组,然后我才能将联系人添加到群组中但由于我无法创建一个组,所以我无法验证该理论。

请指点我正确的方向

Google 联系人 API 是只读的,不能用于更新或添加新联系人。为此,您需要使用 Google 联系人 API,不幸的是,google-api-client gem 不支持它。

要访问 Google 客户端 API,您可以尝试使用此 gem:

google_contacts_api

如果您 运行 在设置时遇到问题,请查看这个 Whosebug 问题:

access google contacts api

它有一个有用的答案,由写 gem 的同一个人写的。

编辑

google_contacts_api gem 的开发似乎在添加创建联系人的功能之前就停止了。我正在查看 Github 上的各种 gem,它们都处于失修/死亡状态。

虽然我很难说,但最好的办法可能是直接通过 their web API.

访问 Google 联系人

祝你好运,抱歉回答令人沮丧。