Отримання URL-адреси зображення профілю Google+ за допомогою user_id


92

Я знаю, що багато 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
Абрахам

Ось приклад для навпаки. Вбудуйте, наприклад, свій нюх StackOverflow у свій профіль Google+: goo.gl/8EE4LT
Лоренц Ло Сауер,

Відповіді:


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?

Щасливого кодування !!


1
Це все ще не є переспрямуванням, його не можна використовувати в <img>тегу
Кирило Кулаков,

2
Саме тому його згадані в форматі JSON чи не ви отримаєте , що, так як є зміни , так що ви не можете очікувати , що всі роботи відповідно з перед тим @KirillKulakov
TheMohanAhuja

1
@rgoraya, ти не можеш запитувати в дзвінку API, але ти, безсумнівно, можеш додати розмір із URL-адресою зображення, яку ти отримав як.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja

1
у мене помилка поганого запиту, який API слід увімкнути на консолі розробника
Earwin delos Santos

3
чи є спосіб, за допомогою якого ми можемо отримати зображення профілю користувача без google plus api, оскільки воно буде застарілим у майбутньому
Saurabh Verma

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: Але як ти автоматично обчислюєш хххххх?
Еміль Стенстрем

47

ОНОВЛЕННЯ: 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 для кожного запиту, див. Мою відповідь.
Еміль Стенстрем

1
Це десь задокументовано?
Jonas Alves

1
Хоча це працює чудово, я б не пішов цим шляхом, оскільки Google може просто перестати підтримувати це, оскільки я ніде не бачу офіційної документації
Lefteris

Нижче я додав повну доказову відповідь
Ерван

Нижче я додав нове рішення для отримання зображення профілю 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.


На Approach2 ви зрозуміли, як встановити розмір зображення за допомогою виклику 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 apasa picasaweb.google.com припинено, і його буде вимкнено до січня 2019 developers.google.com/picasa-web
siddhesh

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
Це нормально, але не повертається, якщо аватар є типовим або завантажений реальним користувачем.
Мігель

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 Profiles (вони все ще існують для користувачів, які їх мали, але я не думаю, що ви можете більше створювати нові). {size}- бажаний розмір фотографії в пікселях. Я майже впевнений, що це не задокументована, підтримувана функція, тому я б не покладався на неї в чомусь важливому, оскільки вона може зникнути в будь-який час без повідомлення. Але для швидких прототипів або невеликих одноразових додатків цього може бути достатньо.


Це десь задокументовано?
Jonas Alves

так, Джастін, схоже, має рацію ... це вже не працює.
Уілл Норріс

2

спроба отримати доступ до / s2 / profile / photo url працює для більшості користувачів, але не для всіх.

Єдиним повноцінним методом є використання API Google+. Вам не потрібна автентифікація користувача для запиту даних загальнодоступного профілю, тому це досить простий метод:

  1. Отримайте ключ Google+ API на 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-адреса зображення.


2

Застарілі API API Google+ були припинені з 7 березня 2019 року. Нещодавно були внесені зміни до плану вимкнення, які можуть пом'якшити його вплив на деяких розробників.


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

-5

Проста відповідь: Ні

Вам потрібно буде запитати API користувача та взяти дані профілю image.url, щоб отримати фотографію. AFAIK не існує формату за замовчуванням для цієї URL-адреси, що містить ідентифікатор користувача.


Ви впевнені? Цікаво, чи планують вони щось робити? Все одно, дякую.
ArVan

1
Якщо ви подивитесь на різні профілі та подивитесь на вихідні дані html, наприклад, з "inspect element" у chrome, ви побачите, що всі вони різні та не містять userID. Також в офіційних документах нічого немає.
Коля

2
Це можливо, як отримати зображення, так і встановити певний розмір для пошуку. Дивіться мою відповідь нижче.
Еміль Стенстрем

Це було неможливо, коли питання та відповідь там були розміщені :)
ArVan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.