2017-05-12 1 views
0

J'ai besoin d'aide pour l'intégration de Google.Créer un contact Google via l'API dans Ruby On Rails

J'ai besoin de créer des contacts google via l'API Google Contacts, mais toutes les gemmes que je trouve ne reçoivent que le contenu et il semble également que l'API Google Contacts ne prend pas en charge les messages JSON, uniquement xml/atom.

C'est ce que je

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 

Tout cela fonctionne très bien et je suis en mesure d'obtenir tous mes contacts, mais Je ne peux pas trouver un moyen avec cette gemme ou une autre gemme ou JSON pour créer des contacts.

Y a-t-il quelqu'un qui a eu ce problème et qui peut me diriger dans la bonne direction?

MISE À JOUR

J'ai également essayé d'utiliser la gemme google_contacts_api pas de succès.

Voici ce que j'ai

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 

Tout fonctionne bien jusqu'à ce que cette ligne (que je suis sorti de l'exemple fourni pour la gemme):

new_group = google_contacts_user.create_group('New group') 

Puis-je obtenir cette exception ligne:

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

Quelqu'un peut-il repérer mon erreur je fait? En outre, comment pourrais-je procéder pour créer des contacts car je n'arrive pas à trouver de documentation ou de messages sur la création et la mise à jour des contacts, je pensais que je devrais créer un groupe et ajouter des contacts au groupe comme je n'arrive pas à créer un groupe, je ne peux pas tester cette théorie.

S'il vous plaît me diriger dans la bonne direction

Répondre

1

L'API Google People est en lecture seule et ne peut être utilisé pour mettre à jour ou ajouter de nouveaux contacts. Pour cela, vous devez utiliser l'API Google Contacts qui n'est malheureusement pas prise en charge par la gemme google-api-client.

Pour accéder à l'API client Google, vous pouvez essayer d'utiliser ce petit bijou:

google_contacts_api

Si vous rencontrez des problèmes sa mise en place, consultez cette question stackoverflow:

access google contacts api

Il a une réponse utile écrite par la même personne qui a écrit la gemme.

EDIT

On dirait que le développement sur la perle rare google_contacts_api arrêté avant la fonctionnalité pour créer des contacts a été ajouté. Je regarde à travers les différentes gemmes sur Github et ils sont tous dans des états de délabrement/mort.

Autant que cela me peine de le dire, votre meilleur pari pourrait être d'accéder directement à Google Contacts via their web API.

Bonne chance et désolé pour la réponse décourageante.

+0

Merci pour la réponse, mais j'ai déjà trouvé ce post et essayé d'utiliser la gemme, j'ai également réussi à le configurer et l'autoriser et obtenir une liste de contacts, mais n'a pas été en mesure de créer des contacts – IDP

+0

Dans ce cas, il Il vous appartient de mettre à jour votre question. Postez votre nouveau code et je vais travailler sur la mise à jour de ma réponse. – eiko

+0

Je ferai bientôt merci – IDP