首页 文章

Google API:获取联系人照片

提问于
浏览
10

我已经能够通过遵循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,这是我进行Web开发的第二周,对不起,如果我看起来很无聊啊 .

任何帮助,将不胜感激!

谢谢,

戈兰

4 回答

  • 0

    您需要向URL发出请求,但还要包含access_token作为查询参数 .

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

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

  • 3

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

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

    更多信息here

  • 1

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

    在任何情况下,Google都会使用 the bytes of the image 回复您,因此您无法按原样显示 . 你认为这是一个很好的解决方案)或找到另一种方式来显示照片

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

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

  • 22

    使用用于检索联系人的相同授权请求代码,只需将url替换为联系人图像的链接rel url . 响应将是图像的字节 . 使用以下代码将图像作为响应返回 .

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

相关问题