Получение URL-адреса профиля Google+ с user_id

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

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

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

10 ответов

Решение

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?

Удачного кодирования!

ОБНОВЛЕНИЕ: метод ниже НЕ РАБОТАЕТ с 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">

Надеюсь, у вас все получится!

ОБНОВЛЕНИЕ: 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-адрес вызова API Google, вы можете прочитать заголовки изображений,
например в PHP:

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

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

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

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

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

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.

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" для размера

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

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">

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

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

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

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

  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-адреса изображения...."}

Устаревшие API Google+ были закрыты с 7 марта 2019 года. Недавно были внесены изменения в план закрытия, которые могут снизить его влияние на некоторых разработчиков.

Если вы используете 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-адресом изображения.

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

    <?
$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;
?>

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

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

Другие вопросы по тегам