我已经能够通过遵循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,这是我开展网络开发的第二周,对不起,如果我看起来很无聊啊。
任何帮助将不胜感激!
谢谢,
戈兰
答案 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)
答案 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);