Получение 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. Вам не нужна аутентификация пользователя для запроса данных общего профиля, так что это довольно простой метод:
Получить ключ API Google+ на https://cloud.google.com/console
Сделайте простой запрос GET по адресу: https://www.googleapis.com/plus/v1/people/+
? Key=
Обратите внимание на + перед именем пользователя. Если вместо этого вы используете идентификаторы пользователей (длинную строку цифр), вам не нужно +
- вы получите очень полное представление данных профиля в формате 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, который содержит идентификатор пользователя.