【问题标题】:Google API : Getting a Contacts PhotoGoogle API:获取联系人照片
【发布时间】:2011-08-24 10:02:56
【问题描述】:

按照 API,我已经能够检索除联系人照片之外的所有内容。

我可以从返回的 xml 中获取 img url 以及 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."'>

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

我正在使用 Rails,这是我进行 Web 开发的第二周,如果我看起来很笨,抱歉啊哈。

任何帮助将不胜感激!

谢谢,

戈兰

【问题讨论】:

    标签: google-api google-contacts-api


    【解决方案1】:

    您需要向 url 发出请求,但还需要将 access_token 作为查询参数。

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

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

    【讨论】:

    • +1 @Savil 非常感谢。我尝试在标头中使用 oauth2 不记名令牌,但这对我不起作用。你摇滚。我一定花了 3 个小时在这个问题上。
    • 上帝谢谢你。 Google API 的文档很糟糕。
    【解决方案2】:

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

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

    更多信息here

    【讨论】:

      【解决方案3】:

      首先,您需要对该 url 进行授权 GET,即,在 Authorization 标头中,您必须放置“OAuth” + AccessToken。另外,我没有尝试过,但正如 Savil 所说,使用访问令牌作为查询参数,您也可以实现相同的效果。

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

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

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

      【讨论】:

      • 我可以将字节转换为base64并显示为图像吗?
      【解决方案4】:

      使用与检索联系人相同的授权请求代码,只需将 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); 
      

      【讨论】:

      • 这是java。如何在 javascript 中实现相同的功能?
      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多