在 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:
如果您 运行 在设置时遇到问题,请查看这个 Whosebug 问题:
access google contacts api
它有一个有用的答案,由写 gem 的同一个人写的。
编辑
google_contacts_api
gem 的开发似乎在添加创建联系人的功能之前就停止了。我正在查看 Github 上的各种 gem,它们都处于失修/死亡状态。
虽然我很难说,但最好的办法可能是直接通过 their web API.
访问 Google 联系人
祝你好运,抱歉回答令人沮丧。
我需要一些有关 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:
如果您 运行 在设置时遇到问题,请查看这个 Whosebug 问题:
access google contacts api
它有一个有用的答案,由写 gem 的同一个人写的。
编辑
google_contacts_api
gem 的开发似乎在添加创建联系人的功能之前就停止了。我正在查看 Github 上的各种 gem,它们都处于失修/死亡状态。
虽然我很难说,但最好的办法可能是直接通过 their web API.
访问 Google 联系人祝你好运,抱歉回答令人沮丧。