在Ruby On Rails中通过API创建Google Contact



我需要一些关于谷歌集成的帮助。

我需要通过谷歌联系人API创建谷歌联系人,但我能找到的所有宝石都只能获取内容,而且谷歌联系人API似乎不支持JSON帖子,只有xml/atom。

这就是我所拥有的

宝石文件

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 '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 People API 是只读的,不能用于更新或添加新联系人。为此,您需要使用Google联系人API,不幸的是,google-api-clientgem不支持该API。

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

google_contacts_api

如果您在设置时遇到问题,请查看此堆栈溢出问题:

访问谷歌通讯录接口

它有一个有用的答案,由写宝石的同一个人写

编辑

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

尽管我很痛苦地说,但最好的选择可能是直接通过他们的网络API访问Google联系人。

祝你好运,对不起令人沮丧的答案。

最新更新