Отримання 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.