รับ URL รูปโปรไฟล์ Google+ ด้วย user_id


94

ฉันรู้ว่า 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 - ไม่รู้ว่าเวลาเท่าไหร่ :)
Leandro

คำตอบ:


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>แท็กได้
Kirill Kulakov

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
ใช่ตอนนี้ใช้งานไม่ได้มีใครรู้บ้างว่ามันเป็นปัญหาชั่วคราวหรือถาวร
Cecilia Abadie

1
วิธีนี้ใช้ไม่ได้อีกต่อไป ให้ข้อผิดพลาด 404 ฉันทดสอบใน Chrome, Safari, FireFox
Justin

2
ฉันได้อัปเดตคำตอบเพื่อแสดงว่าวิธีการข้างต้นใช้งานไม่ได้เมื่อสองสามวันที่ผ่านมา
Emil Stenström

1
@CeciliaAbadie: คุณยืนยันได้ไหมว่าวิธีของคุณยังใช้งานได้? ลองใช้หลายรูปแบบ แต่ไม่สามารถใช้งานกับรหัสผู้ใช้ของฉันได้ (ดูคำตอบด้านบน) คุณสามารถ?
Emil Stenström

2
@rgoraya: แต่คุณจะคำนวณส่วน xxxxxx โดยอัตโนมัติได้อย่างไร?
Emil Stenström

48

UPDATE: Google ได้หยุดการสนับสนุนสำหรับวิธีการนี้ว่าขณะนี้ผลตอบแทน (ไม่พบ) ข้อผิดพลาด


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

ตามที่อธิบายไว้ในบทความFetch Google Plus รูปโปรไฟล์โดยใช้ PHP


1
ไม่จำเป็นต้องทำการร้องขอ HTTP สำหรับแต่ละคำขอดูคำตอบของฉัน
Emil Stenström

1
เอกสารนี้อยู่ที่ใด
Jonas Alves

1
แม้ว่าสิ่งนี้จะทำงานได้อย่างสมบูรณ์แบบ แต่ฉันจะไม่ไปทางนี้เนื่องจาก Google อาจหยุดสนับสนุนสิ่งนี้เนื่องจากฉันไม่เห็นเอกสารที่เป็นทางการที่ไหนเลย
Lefteris

ฉันได้เพิ่มคำตอบหลักฐานฉบับเต็มด้านล่าง
Erwan

ด้านล่างนี้ฉันได้เพิ่มโซลูชันใหม่เพื่อรับรูปโปรไฟล์ Google ตามรหัสผู้ใช้ซึ่งไม่ส่งคืนข้อผิดพลาด 404 โปรดตรวจสอบ
Deepak Goswami

26

แนวทางที่ 1: (ใช้ไม่ได้แล้ว)

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

แนวทางที่ 2: (แต่ละคำขอจะนับในขีด จำกัด อัตรา api ของคุณซึ่งคือ 10k คำขอต่อวันฟรี)

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 $ thumb" ซึ่งมี 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 สำหรับขนาดภาพต่างๆ
Masum

lol..google จะต้องแฮ็กลิงก์รูปภาพที่เปิดเผยต่อสาธารณะทั้งหมดเพื่อให้อยู่ภายใต้ API เพื่อให้ผู้ใช้ไม่มีทางเลือกนอกจากรับคีย์ API
user1323136

2
ฉันสงสัยว่ามีบางอย่างเช่น picasaweb แต่คุณได้รับภาพโดยตรงจากอีเมลไม่ใช่ google + ฉันเพิ่งมีกรณีของผู้ใช้ที่มีรูปภาพในบัญชี Gmail ของคุณ แต่ไม่มีโปรไฟล์ใน google + และไม่ได้นำรูปภาพมา เท่านั้นที่จะได้ url เช่นนี้lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405

2
picasaweb.google.com api ถูกตัดทอนและจะถูกปิดภายในเดือนมกราคม 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

CHANGE: ขนาด 64 นิ้ว "s64"


1
สิ่งนี้ใช้ได้ แต่จะไม่ส่งคืนหากอวตารเป็นค่าเริ่มต้นหรือผู้ใช้จริงอัปโหลด
มิเกล

4

หากคุณต้องการแสดงรูปโปรไฟล์สำหรับผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบันคุณไม่จำเป็นต้องรู้ {user_id} ด้วยซ้ำ เพียงแค่ใช้https://plus.google.com/s2/photos/profile/meก็เพียงพอแล้ว


ขอบคุณ แต่น่าเสียดายที่ไม่ใช่สำหรับผู้ใช้ที่ลงชื่อเข้าใช้ปัจจุบัน
ArVan

คำถามเกี่ยวกับการรับรูปโปรไฟล์โดยใช้ user_id ไม่อยู่กับฉัน
makki

3

คุณสามารถรับ URL สำหรับรูปโปรไฟล์ได้โดยใช้เมธอดpeople.getของ Google+ API ซึ่งต้องใช้การเดินทางไป - กลับพิเศษ แต่เป็นวิธีที่น่าเชื่อถือที่สุดในการรับภาพ

ในทางเทคนิคคุณยังสามารถใช้ URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}ซึ่งจะเปลี่ยนเส้นทางไปยัง URL สุดท้าย {id}คือรหัสผู้ใช้ Google หรือชื่อผู้ใช้โปรไฟล์ Google แบบเก่า (ยังคงมีอยู่สำหรับผู้ใช้ที่มี แต่ฉันไม่คิดว่าคุณจะสามารถสร้างใหม่ได้อีกต่อไป) {size}คือขนาดของภาพถ่ายที่ต้องการเป็นพิกเซล ฉันเกือบจะแน่ใจว่านี่ไม่ใช่ฟีเจอร์ที่รองรับดังนั้นฉันจะไม่พึ่งพาฟีเจอร์นี้สำหรับสิ่งที่สำคัญเพราะมันอาจหายไปได้ทุกเมื่อโดยไม่ต้องแจ้งให้ทราบล่วงหน้า แต่สำหรับต้นแบบด่วนหรือการใช้งานเพียงครั้งเดียวขนาดเล็กอาจเพียงพอ


เอกสารนี้อยู่ที่ใด
Jonas Alves

ใช่จัสตินดูเหมือนจะถูก ... สิ่งนี้ใช้ไม่ได้แล้ว
Will Norris

2

การพยายามเข้าถึง / s2 / profile / photo url ใช้ได้กับผู้ใช้ส่วนใหญ่ แต่ไม่ใช่ทั้งหมด

วิธีการพิสูจน์เพียงวิธีเดียวคือการใช้ Google+ API คุณไม่จำเป็นต้องมีการตรวจสอบผู้ใช้เพื่อขอข้อมูลโปรไฟล์สาธารณะดังนั้นจึงเป็นวิธีที่ค่อนข้างง่าย:

  1. รับคีย์ Google+ API ที่https://cloud.google.com/console

  2. ส่งคำขอ GET ง่ายๆไปที่: https://www.googleapis.com/plus/v1/people/+ <username>? 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 ของภาพที่สามารถเข้าถึงได้


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 Solution โปรดแสดงความคิดเห็นหากไม่มีอีกต่อไป

เพื่อรับ 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
Pooya Estakhri

ถูกต้อง แต่โปรดพิจารณาว่า Facebook API GRAPH 8.0 มีปัญหาหลายประการคุณไม่สามารถอ้างอิงรูปภาพได้เพียงดาวน์โหลดเป็นภาพแรงหรือภาพเสีย ฉันมีคำถามเกี่ยวกับเรื่องนี้ที่ยังไม่มีคำตอบ :(
Leandro

@PooyaEstakhri ไม่ใช่กรณีนี้ในคำตอบนี้ แต่ถ้าคุณกำลังทำงานกับ ASP.NET Core 3.1 คุณจะได้ภาพจากการอ้างสิทธิ์รูปภาพนั่นคือสิ่งที่ฉันทำในที่สุด
Leandro

1
ฉันทดสอบตอนนี้ด้วย uid ขอบเขตแอพของแอพด้วย v8 มันใช้งานได้ https://graph.facebook.com/1661794173890082/picture?width=200&height=200
Pooya Estakhri

1
โพสต์คำตอบของฉันที่นั่น
Pooya Estakhri

-4

คำตอบง่ายๆ: ไม่

คุณจะต้องสอบถามบุคคล API และใช้ข้อมูลimage.urlโปรไฟล์เพื่อรับรูปภาพ AFAIK ไม่มีรูปแบบเริ่มต้นสำหรับ url ที่มี userID


แน่ใจนะ? ฉันสงสัยว่าพวกเขามีแผนที่จะทำสิ่งนั้นหรือไม่? ขอบคุณต่อไป
ArVan

1
หากคุณดูโปรไฟล์ที่แตกต่างกันและดูที่เอาต์พุต html เช่นด้วย "ตรวจสอบองค์ประกอบ" ใน chrome คุณจะเห็นว่าต่างกันทั้งหมดและไม่มีรหัสผู้ใช้ นอกจากนี้ยังไม่มีเอกสารอย่างเป็นทางการ
Kolja

2
เป็นไปได้ทั้งเพื่อรับภาพและกำหนดขนาดเฉพาะที่ต้องการค้นหา ดูคำตอบของฉันด้านล่าง
Emil Stenström

เป็นไปไม่ได้เมื่อคำถามและคำตอบนี้โพสต์ไว้ที่ไหน :)
ArVan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.