我已经能够按照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."'>
问题是我不知道如何让它显示。 当我尝试它时,我只得到网址的最后一部分(即:"/32432eewqdweq")而没有图像。
我正在使用rails,这是我做Web开发的第二周,对不起,如果我看起来菜鸟啊哈。
任何帮助将不胜感激!
谢谢
戈兰
您需要向 url 发出请求,但也要将access_token作为查询参数包含在内。
因此,使用您的示例,假设您的access_token是ABCDEF123456ABCDEF,那么您要发出的 GET 请求是:
https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de?access_token=ABCDEF123456ABCDEF
只是一个小小的提示,根据谷歌的API文档:
注意:如果联系人没有照片,则照片链接元素 没有 gd:etag 属性。
更多信息在这里
首先,您需要对该 url 进行授权 GET,即在授权标头中,您必须输入 "OAuth " + AccessToken。另外,我还没有尝试过,但正如 Savil 所说,使用访问令牌作为查询参数,您也可以实现相同的目标。
在任何情况下,Google都会以图像的字节数响应您,因此您无法按原样显示。您需要将字节数组保存到服务器中的文件中(我认为这不是一个好的解决方案)或找到另一种显示照片的方法
如果您想了解更多信息,这里是Google关于联系人照片的文档
这是一个相当古老的问题,但我希望这会有所帮助
使用与检索联系人相同的授权请求代码,只需将 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);