2011-05-12 50 views
10

He podido recuperar todo menos la foto de contactos siguiendo la API.Google API: Obtener una foto de contactos

Puedo obtener la img url así como la gd: etag del xml devuelto. A continuación se muestra el ejemplo de API de Google, y es lo mismo que recibo, con el valor de los atributos siendo diferente, por supuesto, para mis contactos.

<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."'> 

El problema es que no sé cómo conseguir que se muestre. Cuando lo intento, obtengo la última parte de la url (es decir, "/ 32432eewqdweq") y no aparece ninguna imagen.

Estoy usando rails, y esta es mi segunda semana de desarrollo web, lo siento si me parece noobish aha.

¡Cualquier ayuda sería apreciada!

Gracias,

Goran

Respuesta

20

Usted tendría que hacer una petición a la URL, sino que también incluyen la señal_acceso como parámetro de consulta.

Por lo tanto, la utilización de su ejemplo, digamos que si su señal_acceso es ABCDEF123456ABCDEF, entonces la petición GET desea hacer es:

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

+0

+1 @Savil muchas gracias. Intenté usar token de portador oauth2 en el encabezado y eso no funciona para mí. Tu rock Debo haber pasado 3 horas rompiéndome la cabeza en este caso. –

+0

gracias a Dios. Las API de Google tienen una documentación terrible. –

1

En primer lugar, es necesario hacer un GET autorizada a esa url, es decir, en el encabezado Authorization debes poner "OAuth" + AccessToken. Además, no lo he intentado pero, como ha dicho Savil, con el token de acceso como parámetro de consulta, también puedes lograr lo mismo.

En cualquier caso, Google le responde con los bytes de la imagen, por lo que no puede mostrar como está. Necesitarás guardar la matriz de bytes en un archivo de tu servidor (no creo que sea una buena solución) o encontrar otra forma de mostrar la foto

Si quieres leer más al respecto, here es la documentación de Google sobre fotos de los contactos

ésta es una pregunta bastante antiguo, pero sin embargo espero que esto puede ser útil

+0

¿Puedo convertir el byte a base64 y visualizar como imagen? – Satyadev

0

Utilice el mismo código de solicitud de autorización se utiliza para recuperar los contactos y simplemente reemplazar la URL con el URL del enlace rel la imagen de contacto. La respuesta serán los bytes de la imagen. Use el siguiente código para devolver la imagen como respuesta.

 //'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

Esto es java. ¿Cómo lograr lo mismo en javascript? – Satyadev

3

Sólo una pequeña pista, de acuerdo con documentos de la API de Google:

Nota: Si un contacto no tiene una foto, entonces el elemento de enlace foto no tiene gd: atributo etag.

Más información here

Cuestiones relacionadas