Получение URL изображения профиля Google+ с user_id

93

Я знаю, что многие API социальных сетей предоставляют способ создания URL-адреса для изображения профиля пользователя, используя его user_id или имя пользователя. Для Facebook это выглядит так:

http://graph.facebook.com/user_id/picture?type=square

Есть ли что-то подобное для Google Plus? Или любой другой способ получить картинку пользователя без вызова API ??

Арван
источник
3
Я открыл запрос функции, который вы можете пометить, чтобы получать обновления, если Google когда-нибудь его реализует. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham,
Вот пример обратного. Включите, например, свой талант StackOverflow в свой профиль Google+: goo.gl/8EE4LT
Lorenz Lo Sauer
Ответ на этот вопрос менялся с 2012 года слишком много раз. Я опубликовал один ответ, который работает в 2020 году - не знаю, сколько времени :)
Леандро

Ответы:

100

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

https://plus.google.com/s2/photos/profile/(user_id)?sz=150

Новый способ сделать это

URL запроса

https://www.googleapis.com/plus/v1/people/115950284...320?fields=image&key={YOUR_API_KEY}

Это даст URL-адрес изображения профиля Google в формате json, как указано ниже.

Отклик :

{
    "image": 
    {
         "url": "https://lh3.googleusercontent.com/-OkM...AANA/ltpH4BFZ2as/photo.jpg?sz=50"
    }
}

Дополнительные параметры можно найти , чтобы отправить с URL , который вам может понадобиться от здесь

Для получения более подробной информации вы также можете проверить данный вопрос, где я ответил на проблему такого же типа. Как получить изображение пользователя через идентификатор пользователя в Google Plus?

Дипак Госвами
источник
2
Это все равно не редирект, его нельзя использовать в <img>теге
Кирилл Кулаков
2
вот почему он упоминается в формате JSON, разве вы не понимаете, поскольку есть изменения, поэтому вы не можете ожидать, что все будет работать, как раньше @KirillKulakov
TheMohanAhuja
1
@rgoraya вы не можете запросить в вызове API, но вы наверняка можете добавить размер с URL-адресом изображения, которое вы получили как.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
У меня плохая ошибка запроса, какой API я должен включить на моей консоли разработчика
Эрвин Делос Сантос,
3
есть ли способ получить изображение профиля пользователя без google plus api, поскольку он будет устаревшим в будущем
Саураб Верма
94

ОБНОВЛЕНИЕ: приведенный ниже метод НЕ РАБОТАЕТ с 2015 года.

Можно получить изображение профиля и даже установить его размер:

https://plus.google.com/s2/photos/profile/<user_id>?sz=<your_desired_size>

Пример: изображение моего профиля с размером 100 пикселей:

https://plus.google.com/s2/photos/profile/116018066779980863044?sz=100

Использование с тегом изображения:

<img src="https://plus.google.com/s2/photos/profile/116018066779980863044?sz=100" width="100" height="100">

Надеюсь, у вас это сработает!

Эмиль Стенстрём
источник
1
Да, сейчас не работает, кто-нибудь знает, временная это проблема или постоянная?
Сесилия Абади
1
Этот метод больше не работает. Выдает ошибку 404. Тестировал в Chrome, Safari, FireFox.
Джастин
2
Я обновил ответ, чтобы отразить, что вышеуказанный метод не работает несколько дней назад.
Эмиль Стенстрём
1
@CeciliaAbadie: Можете ли вы подтвердить, что ваш метод все еще работает? Пробовал несколько вариантов, но не смог заставить его работать с моим идентификатором пользователя (см. Ответ выше). Ты можешь?
Эмиль Стенстрём
2
@rgoraya: Но как вы рассчитываете часть xxxxxx автоматически?
Эмиль Стенстрём
48

ОБНОВЛЕНИЕ: Google прекратил поддержку этого метода, теперь он возвращает ошибку 404 (не найдено) .


Все эти URL-адреса получают изображение профиля пользователя:

https://www.google.com/s2/photos/profile/{user_id}
https://plus.google.com/s2/photos/profile/{user_id}
https://profiles.google.com/s2/photos/profile/{user_id}

Они перенаправляют на тот же URL-адрес изображения, который вы получаете из Google API, уродливая ссылка как
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Самый простой - напрямую использовать как источник изображения:

<img src="https://www.google.com/s2/photos/profile/{user_id}">

В противном случае, чтобы получить точно такой же URL-адрес вызова Google API, вы можете прочитать заголовки изображений,
например, в PHP:

$headers = get_headers("https://www.google.com/s2/photos/profile/{user_id}", 1);
echo "<img src=$headers[Location]>";

как описано в статье Получение изображения профиля Google Plus с помощью PHP .

Сальвадор
источник
1
Не нужно делать HTTP-запрос для каждого запроса, см. Мой ответ.
Emil Stenström
1
Это где-нибудь задокументировано?
Йонас Алвес,
1
Хотя это работает отлично, я бы не пошел по этому пути, так как Google может просто перестать поддерживать это, поскольку я нигде не вижу официальной документации
Лефтерис
Я добавил полный доказательный ответ ниже
Эрван
Ниже я добавил новое решение для получения изображения профиля Google по идентификатору пользователя, которое не возвращает ошибку 404, проверьте это.
Дипак Госвами,
26

Подход 1: (больше не работает)

https://plus.google.com/s2/photos/profile/<user_id>?sz=<your_desired_size>

Подход 2: (каждый запрос учитывается в ваших ограничениях скорости API, что составляет 10 тыс. Запросов в день бесплатно)

https://www.googleapis.com/plus/v1/people/<user_id>?fields=image&key={YOUR_API_KEY}

со следующим форматом ответа:

{ "image": { "url": "lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50"; } }

Подход 3: (не требуется ключ api)

http://picasaweb.google.com/data/entry/api/user/<user_id>?alt=json

в ответе json вы получите свойство с именем "gphoto $ thumbnail", которое содержит URL-адрес изображения профиля, как показано ниже:

http://lh6.ggpht.com/-btLsReiDeF0/AAAAAAAAAAI/AAAAAAAAAAA/GXBpycNk984/s64-c/filename.jpg

Вы можете заметить в URL-адресе часть «s64-c», что означает, что размер изображения равен 64, я пробовал использовать другие значения, такие как «s100-c», и они работали. Также, если вы удалите часть «s64-c» и добавите параметр «? Sz = 100», это также будет работать на данный момент. Хотя это не очень хороший способ получить изображение профиля пользователя gplus, но преимущество в том, что он не требует никакого ключа api.

Масум
источник
На подходе 2 вы выяснили, как установить размер изображения с помощью вызова API?
Maca
@Maca, вы должны получить такой ответ api: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}}, откуда вы можете установить параметр sz для изображений разного размера
Масум
lol..google придется взламывать каждую общедоступную ссылку на изображение, чтобы попасть под их API, чтобы у людей не было другого выбора, кроме как получить ключ API.
user1323136
2
Интересно, есть ли что-то вроде picasaweb, но вы получаете изображение прямо из электронной почты, а не из Google +. У меня просто случай, когда пользователь имеет изображение в вашей учетной записи Gmail, но не имеет профиля в Google + и не приносит изображение. Только такой URL можно получить lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405
2
api picasaweb.google.com будет отключен и будет отключен к
январю
11

Google, API не требуется:

$data = file_get_contents('http://picasaweb.google.com/data/entry/api/user/<USER_ID>?alt=json');
$d = json_decode($data);
$avatar = $d->{'entry'}->{'gphoto$thumbnail'}->{'$t'};

// Пример вывода: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

ИЗМЕНЕНИЕ: 64 в "s64" по размеру

Шон Ребело
источник
1
Это нормально, но не возвращается, если аватар используется по умолчанию или загружен реальным пользователем.
Miguel
4

Если вы хотите показать изображение профиля для текущего пользователя, вошедшего в систему, вам даже не нужно знать {user_id}. Достаточно просто использовать https://plus.google.com/s2/photos/profile/me.

Дэнни Руйтерс
источник
спасибо, но, к сожалению, это не для текущего авторизованного пользователя
ArVan
Вопрос заключался в получении изображения профиля с использованием user_id. Не со мной
makki
3

Вы можете получить URL-адрес изображения профиля с помощью метода people.get API Google+. Это требует дополнительного обхода, но это самый надежный способ получить изображение.

Технически вы также можете использовать URL-адрес, https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}который затем будет перенаправлять на конечный URL-адрес. {id}- это идентификатор пользователя Google или одно из старых имен пользователей профилей Google (они все еще существуют для пользователей, у которых они были, но я не думаю, что вы больше можете создавать новые). {size}- желаемый размер фотографии в пикселях. Я почти уверен, что это не документированная и не поддерживаемая функция, поэтому я бы не стал полагаться на нее ни в чем важном, поскольку она может исчезнуть в любое время без предварительного уведомления. Но для быстрых прототипов или небольших разовых приложений этого может быть достаточно.

Уилл Норрис
источник
Это где-нибудь задокументировано?
Йонас Алвес,
да, похоже, Джастин прав ... это больше не работает.
Уилл Норрис
2

попытка получить доступ к URL-адресу / s2 / profile / photo работает для большинства пользователей, но не для всех.

Единственный метод полной проверки - использовать API Google+. Вам не нужна аутентификация пользователя для запроса данных общедоступного профиля, поэтому это довольно простой метод:

  1. Получите ключ API Google+ на https://cloud.google.com/console

  2. Сделайте простой запрос GET на: https://www.googleapis.com/plus/v1/people/+ <имя пользователя>? Key =

Обратите внимание на + перед именем пользователя. Если вместо этого вы используете идентификаторы пользователей (длинная строка цифр), вам не нужен +

  1. вы получите исчерпывающее представление данных профиля в формате JSON, которое включает: "image": {"url": " https://lh4.googleusercontent.com/ ..... остальная часть URL-адреса изображения .... "}
Эрван
источник
2

Если вы используете Flutter, вы можете получить к нему доступ через people.googleapis.comконечную точку, код использует google_sign_inбиблиотеку

import 'package:google_sign_in/google_sign_in.dart';

Future<String> getPhotoUrl(GoogleSignInAccount account, String userId) async {
  // final authentication = await account.authentication;
  final url = 'https://people.googleapis.com/v1/people/${userId}?personFields=photos';
  final response = await http.get(
    url,
    headers: await account.authHeaders
  );

  final data = json.decode(response.body);
  return data['photos'].first['url'];
}

Вы получите что-то вроде

{
  resourceName: people/998812322529259873423, 
  etag: %EgQBAzcabcQBAgUH, 
  photos: [{metadata: {primary: true, source: {type: PROFILE, id: 107721622529987673423}}, 
  url: https://lh3.googleusercontent.com/a-/abcdefmB2p1VWxLsNT9WSV0yqwuwo6o2Ba21sh_ra7CnrZ=s100}]
}

где url- доступный URL-адрес изображения.

onmyway133
источник
1

Пробовал все возможное .. вот и последний рабочий код. Надеюсь, это поможет тому, кто его ищет.

    <?
$url='https://www.googleapis.com/plus/v1/people/116599978027440206136?fields=image%2Furl&key=MY_API_KEY&fields=image';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$d = json_decode($response);
$avatar_url = $d->{'image'}->{'url'};
echo $avatar_url;
?>
сурадж джайн
источник
1

2020 Решение Прокомментируйте, если больше не доступно.

Чтобы получить URL профиля от аутентифицированного пользователя.

GET https://people.googleapis.com/v1/people/[THE_USER_ID_OF_THE_AUTHENTICATED_USER]?personFields=photos&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json

Отклик:

{
  "resourceName": "people/[THE_USER_ID_OF_THE_AUTHENTICATED_USER]",
  "etag": "12345",
  "photos": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "PROFILE",
          "id": "[THE_USER_ID_OF_THE_AUTHENTICATED_USER]"
        }
      },
      "url": "https://lh3.googleusercontent.com/a-/blablabla=s100"
    }
  ]
}

и ссылку можно использовать как:

<img src="https://lh3.googleusercontent.com/a-/blablabla=s100">
Леандро
источник
1
это не так просто, как Facebook позволяет использовать tho
Пуйя Эстахри,
Что ж, это правильно, но примите во внимание, что Facebook API GRAPH 8.0 имеет несколько проблем, вы не можете ссылаться на изображение, только загрузите его как принудительное или сломанное изображение. У меня был вопрос по этому поводу, но пока нет ответа :(
Леандро
@PooyaEstakhri не в этом случае в этом ответе, но если вы работаете с ASP.NET Core 3.1, вы можете получить изображение из заявки на изображение, это то, что я наконец сделал.
Леандро
1
Я тестировал сейчас с uid области приложения приложения с v8, он работает https://graph.facebook.com/1661794173890082/picture?width=200&height=200
Пуйя Эстахри
1
разместил там свой ответ.
Пуйя Эстахри,
-4

Простой ответ: нет

Вам нужно будет запросить API человека и взять данные профиля image.url, чтобы получить фотографию. AFAIK нет формата по умолчанию для этого URL-адреса, который содержит идентификатор пользователя.

Коля
источник
Ты уверен? Интересно, есть ли у них планы сделать такую ​​вещь? Спасибо, в любом случае.
ArVan
1
Если вы посмотрите на разные профили и посмотрите на вывод html, например, с помощью «inspect element» в chrome, вы увидите, что все они разные и не содержат userID. Также в официальных документах ничего нет.
Коля
2
ВОЗМОЖНО, как получить изображение, так и установить определенный размер для поиска. Смотрите мой ответ ниже.
Emil Stenström
Это было невозможно, когда был размещен вопрос и этот ответ :)
ArVan