Google API: получение фотографии контактов - PullRequest
10 голосов
/ 12 мая 2011

Мне удалось получить все, кроме фотографии контактов, следуя API.

Я могу получить img url и 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") и без изображения.

Я использую рельсы, и это моя вторая неделя веб-разработки, извините, если я казаюсь нубишей ага.

Любая помощь будет оценена!

Спасибо

Goran

Ответы [ 4 ]

22 голосов
/ 03 октября 2011

Вам нужно будет сделать запрос к URL, но также включить access_token в качестве параметра запроса.

Итак, используя ваш пример, скажем, если ваш access_token - ABCDEF123456ABCDEF, то запрос GET, который вы хотите сделать:

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

3 голосов
/ 18 октября 2013

Просто небольшая подсказка, согласно документации Google API:

Примечание. Если у контакта нет фотографии, то элемент ссылки на фотографию не имеет атрибута gd: etag.

Подробнее здесь

1 голос
/ 15 марта 2012

Во-первых, вам нужно сделать авторизованный GET для этого URL, то есть в заголовке авторизации вы должны поставить «OAuth» + AccessToken. Кроме того, я не пробовал, но, как сказал Савил, используя токен доступа в качестве параметра запроса, вы также можете достичь того же.

В любом случае, Google ответит вам байтами изображения , поэтому вы не сможете отобразить как есть. Вам нужно будет либо сохранить байтовый массив в файл на вашем сервере (я не думаю, что это будет хорошим решением), либо найти другой способ отображения фотографии

Если вы хотите узнать больше об этом, здесь - это документация Google о фотографиях контактов

Это довольно старый вопрос, но, тем не менее, я надеюсь, что это может быть полезным

0 голосов
/ 04 августа 2012

Используйте тот же авторизованный код запроса, который использовался для получения контактов, и просто замените 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); 
...