Google API:获取联系人照片

时间:2011-05-12 19:35:52

标签: google-api google-contacts

我已经能够通过遵循API检索除联系人照片之外的所有内容。

我可以获取img url以及返回的xml中的gd:etag。以下是Google API示例,它与我获得的内容相同,当然,我的联系人的属性值也不同。

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

问题是我不知道如何让它显示出来。当我尝试它时,我只是得到网址的最后一部分(即:“/ 32432eewqdweq”)而没有图像。

我正在使用rails,这是我开展网络开发的第二周,对不起,如果我看起来很无聊啊。

任何帮助将不胜感激!

谢谢,

戈兰

4 个答案:

答案 0 :(得分:22)

您需要向网址发出请求,但也请将access_token包含为查询参数。

因此,使用您的示例,假设您的access_token是ABCDEF123456ABCDEF,那么您要进行的GET请求是:

  

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

答案 1 :(得分:3)

根据谷歌的API文档,只是一个小小的提示:

  

注意:如果联系人没有照片,那么照片链接元素   没有gd:etag属性。

更多信息here

答案 2 :(得分:1)

首先,您需要对该网址进行授权GET,即在授权标题中,您必须输入“OAuth”+ AccessToken。另外,我没有尝试,但正如Savil所说,使用Access Token作为查询参数,您也可以实现相同的目标。

在任何情况下,Google都会使用图片的字节来回复您,因此您无法按原样显示。您需要将字节数组保存到服务器中的文件中(我认为这不是一个好的解决方案)或者找到另一种显示照片的方法

如果您想了解更多相关信息,here是Google关于联系人照片的文档

这是一个相当古老的问题,但我希望这可能会有所帮助

答案 3 :(得分:0)

使用与检索联系人相同的授权请求代码,只需将网址替换为联系人图片的链接相关网址即可。响应将是图像的字节。使用以下代码将图像作为响应返回。

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