Google API: получение фотографий для контактов
Мне удалось получить все, кроме фотографии контактов, следуя API.
Я могу получить url img, а также gd: etag из возвращенного xml. Ниже приведен пример API Google, и это то же самое, что и я, поскольку значение атрибутов для моих контактов разное.
<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" ) и без изображения.
Я использую рельсы, и это моя вторая неделя создания веб-разработки, извините, если мне кажется noobish aha.
Любая помощь будет оценена!
Спасибо,
Горан
Ответы
Ответ 1
Вам нужно будет сделать запрос к URL-адресу, но также включить access_token в качестве параметра запроса.
Итак, используя ваш пример, скажем, если ваш access_token является ABCDEF123456ABCDEF, тогда запрос GET, который вы хотите сделать, следующий:
https://www.google.com/m8/feeds/photos/media/liz%40gmail.com/c9012de?access_token=ABCDEF123456ABCDEF
Ответ 2
Небольшой намек, согласно документам API Google API:
Примечание. Если у контакта нет фотографии, тогда элемент ссылки на фото не имеет атрибута gd: etag.
Подробнее здесь
Ответ 3
Сначала вам нужно сделать авторизованный GET для этого URL-адреса, т.е. в заголовке авторизации вы должны поставить "OAuth" + AccessToken. Кроме того, я не пробовал, но, как сказал Савилл, с токеном доступа в качестве параметра запроса, вы также можете достичь того же.
В любом случае Google отвечает на байты изображения, поэтому вы не можете отображать их как есть. Вам нужно либо сохранить массив байтов в файл на вашем сервере (я не думаю, что это будет хорошее решение), либо найти другой способ отображения фотографии
Если вы хотите больше узнать об этом, здесь, это документация Google о фотографиях контактов
Это довольно старый вопрос, но, тем не менее, я надеюсь, что это может быть полезно
Ответ 4
Используйте тот же авторизованный код запроса, который используется для извлечения контактов, и просто замените URL ссылкой 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);