Je me débats avec ça depuis plusieurs heures maintenant, les docs semblent être terribles. En gros, j'essaie d'obtenir un accès en lecture aux contacts d'un utilisateur authentifié par OAuth2, en utilisant soit l'option API Portable Contacts ou le plein Contacts API . Google a récemment a commencé permettant OAuth2 .
Je peux accéder aux contacts d'un utilisateur via l'API Contacts en demandant d'abord à l'utilisateur de s'authentifier avec la portée : "https://www.google.com/m8/feeds". Ensuite, je peux récupérer ses 25 premiers contacts en utilisant jQuery (le code affiché est le suivant CoffeeScript )
$.ajax
url: "https://www.google.com/m8/feeds/contacts/default/full"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
Cela fonctionne, et j'obtiens des données JSON. Cependant, de façon presque incroyable, le seul ordre des contacts que Google fournit (pour autant que je sache) est ' dernière modification (sérieusement wtf ?). J'ai besoin de quelque chose comme "les meilleurs amis" ou "les plus populaires".
Ce qui, par hasard, est quelque chose que l'API Google Portable Contacts peut faire (Yay !). Bien sûr, je n'arrive pas à faire fonctionner une demande réussie.
Tout d'abord, je demande à l'utilisateur de s'authentifier avec l'API de contacts portables en cliquant sur ce lien (notez la portée : "https://www-opensocial.googleusercontent.com/api/people")
<a href="https://accounts.google.com/o/oauth2/authclient_id=457681297736.apps.googleusercontent.com&response_type=token&redirect_uri=http://localhost:3000/team&scope=https://www-opensocial.googleusercontent.com/api/people">Import Google Contacts</a>
Cela fonctionne bien, et je reçois un jeton d'accès en retour.
Ensuite, j'essaie d'envoyer une requête ajax à l'API des contacts portables.
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
Mais cela renvoie une erreur 403
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data.
Une idée de ce que je fais mal ?
Annexe
J'ai trouvé ce rapport de bogue dans le forum Google OAuth2 qui indiquait que nous devions définir un en-tête d'autorisation lorsque nous travaillons avec l'API Portable Contacts. J'ai donc essayé comme ceci :
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
beforeSend: (xhr) ->
xhr.setRequestHeader "Authorization", "OAuth #{token}"
data: { access_token: token }
success: (data, status) ->
console.log "The returned data", data
Mais cela me donne la même erreur 403 :
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data