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