2011-05-12 6 views
10

J'ai pu récupérer tout sauf la photo des contacts en suivant l'API.API Google: Obtention d'un contact Photo

Je peux obtenir l'img url ainsi que le gd: etag du xml retourné. Voici l'exemple de l'API Google, et c'est la même chose que je reçois, avec la valeur des attributs étant bien sûr différente pour mes contacts.

<link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' 
    href='https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de' 
    gd:etag='"KTlcZWs1bCp7ImBBPV43VUV4LXEZCXERZAc."'> 

Le problème est que je ne sais pas comment l'afficher. Quand je l'essaye, j'obtiens juste la dernière partie de l'URL (ie: "/ 32432eewqdweq") et aucune image. J'utilise des rails, et c'est ma deuxième semaine de développement web, désolé si je n'ai pas l'air de rien.

Toute aide serait appréciée!

Merci,

Goran

Répondre

20

Vous devez faire une demande à l'URL, mais aussi inclure le access_token comme paramètre de requête.

Ainsi, en utilisant votre exemple, disons que si votre access_token est ABCDEF123456ABCDEF, la demande GET que vous voulez faire est:

https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de?access_token=ABCDEF123456ABCDEF

+0

+1 @Savil merci beaucoup. J'ai essayé d'utiliser le jeton porteur oauth2 dans l'en-tête et cela ne fonctionne pas pour moi. Tu gères. J'ai dû passer 3 heures à me casser la tête sur celui-ci. –

+0

Dieu merci. Les API Google ont une documentation terrible. –

1

D'abord, vous devez faire un GET autorisé à cette adresse, c'est-à-dire, dans l'en-tête Authorization vous devez mettre "OAuth" + AccessToken. En outre, je n'ai pas essayé mais, comme Savil l'a dit, avec le jeton d'accès comme paramètre de requête, vous pouvez également réaliser la même chose.

En tout cas, Google vous répond avec les octets de l'image, donc vous ne pouvez pas afficher tel quel. Vous devrez sauvegarder le tableau d'octets dans un fichier de votre serveur (je ne pense pas que ce soit une bonne solution) ou trouver un autre moyen d'afficher la photo

Si vous voulez en savoir plus, here est la documentation de Google à propos de photos contact

C'est une question assez vieux, mais je l'espère quand même cela peut être utile

+0

Je peux convertir l'octet en base64 et l'afficher en tant qu'image? – Satyadev

0

Utilisez le même code de demande autorisée utilisé pour récupérer les contacts et il suffit de remplacer l'URL avec l'url lien rel l'image de contact. La réponse sera les octets de l'image. Utilisez le code suivant pour renvoyer l'image en réponse.

 //'in' is the inputStream returning from the call, response is the HttpServletResponse 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[4096]; 
     int read; 
     while (true) { 
      if ((read = in.read(buffer)) != -1) { 
       out.write(buffer, 0, read); 
      } else { 
       break; 
      } 
     } 
     response.setContentType("image/jpeg"); 
     response.setContentLength(buffer.length); 
     request.getSession().setAttribute("image", new String(out.toByteArray())); 
     response.getOutputStream().write(buffer); 
+0

Ceci est Java. Comment faire la même chose en javascript? – Satyadev

3

Juste un petit indice, selon les documents de l'API de Google:

Remarque: Si un contact ne dispose pas d'une photo, l'élément de liaison photo n'a pas gd: attribut ETAG.

Plus d'info here