使用 user_id 获取 Google+ 个人资料图片网址
Posted
技术标签:
【中文标题】使用 user_id 获取 Google+ 个人资料图片网址【英文标题】:Getting Google+ profile picture url with user_id 【发布时间】:2012-02-26 01:46:18 【问题描述】:我知道很多社交网络 API 都提供了一种方法,可以使用用户的 user_id 或用户名来构造用户个人资料图片的 url。对于 Facebook,它看起来像这样:
http://graph.facebook.com/user_id/picture?type=square
现在 Google Plus 有类似的功能吗?或者任何其他无需 API 调用即可获取用户图片的方式??
【问题讨论】:
我打开了一个功能请求,如果 Google 实现了它,您可以加注星标以获取更新。 code.google.com/p/google-plus-platform/issues/detail?id=167 这是一个相反的例子。例如,在您的 Google+ 个人资料中嵌入您的 *** 天赋:goo.gl/8EE4LT 自 2012 年以来,这个问题的答案改变了太多次。我发布了一个在 2020 年有效的答案 - 不知道需要多少时间 :) 【参考方案1】: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">
【讨论】:
它不像 facebook 允许的那样直接使用 tho 嗯,没错,但要考虑到Facebook API GRAPH 8.0 有几个问题,不能引用图片,只能作为强制或损坏的图片下载。我有一个问题没有回应:( 我现在使用 v8 应用的应用范围 uid 进行了测试,它可以工作https://graph.facebook.com/1661794173890082/picture?width=200&height=200
在那里发布了我的答案。
@PooyaEstakhri 它改变了。在任何情况下,我自己都使用代码将图像保存在我的服务器中,并在图片发生更改时更新。【参考方案2】:
Google 已经更改了他们的政策,因此获取 Google 个人资料图片的旧方法现在无法使用,这是
https://plus.google.com/s2/photos/profile/(user_id)?sz=150
这样做的新方法是
请求网址
https://www.googleapis.com/plus/v1/people/115950284...320?fields=image&key=YOUR_API_KEY
这将以 json 格式提供 Google 个人资料图片网址,如下所示
回应:
"image":
"url": "https://lh3.googleusercontent.com/-OkM...AANA/ltpH4BFZ2as/photo.jpg?sz=50"
更多参数可以通过here找到您可能需要的URL发送
有关更多详细信息,您还可以查看我针对相同类型问题回答的给定问题 How to get user image through user id in Google plus?
【讨论】:
它仍然不是重定向,不能在<img>
标签内使用
这就是为什么它以 JSON 格式提到的原因你不明白,因为有一些变化所以你不能指望一切都像@KirillKulakov 之前一样工作
@rgoraya 您不能在 API 调用中请求,但您肯定可以使用图像 URL 添加大小,您得到的是 .../-OkM...AANA/ltpH...as/photo.jpg?sz=512
我有一个错误的请求错误,我应该在我的开发者控制台上启用什么 api
有什么方法可以在没有 google plus api 的情况下获取用户的个人资料图片,因为它将来会被弃用【参考方案3】:
如果你使用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
是可访问的图片网址。
【讨论】:
【参考方案4】:更新:自 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" >
希望你能成功!
【讨论】:
是的,现在不工作,有人知道这是暂时性问题还是永久性问题? 此方法不再有效。给出 404 错误。我在 Chrome、Safari、FireFox 中进行了测试。 我已经更新了答案,以反映上述方法在几天前不起作用。 @CeciliaAbadie:你能确认你的方法仍然有效吗?尝试了几种变体,但无法使其与我的用户 ID 一起使用(请参阅上面的答案)。可以吗? @rgoraya:但是你如何自动计算xxxxxx部分?【参考方案5】:尽了一切可能。这是最后一段工作代码。希望它对正在寻找它的人有所帮助。
<?
$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;
?>
【讨论】:
【参考方案6】:谷歌,不需要 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
更改:“s64”中的 64 表示尺寸
【讨论】:
这很好,但如果头像是默认头像或真实用户上传的头像,则不会返回。【参考方案7】:方法 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$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 你应该得到这样的 api 响应: "image": "url": "lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50" 你可以在其中为不同的图像大小设置 sz 参数跨度> lol..google 将不得不破解每个公开可用的图像链接以进入他们的 API,这样人们别无选择,只能获取 API 密钥。 我想知道是否有类似 picasaweb 的东西,但您直接从电子邮件而不是 google + 获得图片。我只是有一个用户在您的 Gmail 帐户中有图像但在 google + 上没有个人资料并且没有带图像的情况。只能得到这样的url lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/… picasaweb.google.com api 已过时,将于 2019 年 1 月关闭 developers.google.com/picasa-web【参考方案8】:更新: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
他们重定向到您从 Google API 获得的相同图片网址,这是一个丑陋的链接 lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAAI/AAAAAAAAAA/ooSNulbLz8U/photo.jpg
最简单的就是直接使用like image source:
<img src="https://www.google.com/s2/photos/profile/user_id">
否则,要获得与 Google API 调用完全相同的 URL,您可以读取图像标题, 例如在 php 中:
$headers = get_headers("https://www.google.com/s2/photos/profile/user_id", 1);
echo "<img src=$headers[Location]>";
如文章 Fetch Google Plus Profile Picture using PHP 中所述。
【讨论】:
不需要对每个请求都进行HTTP请求,看我的回答。 这是否记录在任何地方? 虽然这很有效,但我不会这样做,因为谷歌可能会停止支持这一点,因为我在任何地方都看不到官方文档 我在下面添加了完整的证明答案 下面我添加了一个新的解决方案,通过用户 ID 获取 Google 个人资料图片,它不会返回 404 错误,请检查。【参考方案9】:尝试访问 /s2/profile/photo 网址适用于大多数用户,但不是所有用户。
唯一的完整证明方法是使用 Google+ API。您不需要用户身份验证来请求公共个人资料数据,因此这是一种相当简单的方法:
在https://cloud.google.com/console 上获取 Google+ API 密钥
向https://www.googleapis.com/plus/v1/people/+?key=
发出简单的 GET 请求注意用户名前的 +。 如果您改用用户 ID(一长串数字),则不需要 +
-
您将获得一个非常全面的配置文件数据 JSON 表示,其中包括:
"image":"url": "https://lh4.googleusercontent.com/..... 其余图片url...."
【讨论】:
【参考方案10】:如果您想显示当前登录用户的头像,您甚至不需要知道 user_id。只需使用https://plus.google.com/s2/photos/profile/me
就足够了。
【讨论】:
谢谢,但不幸的是它不适用于当前登录的用户 问题是关于使用 user_id 获取个人资料图片。不是与我【参考方案11】:您可以使用 Google+ API 的 people.get 方法获取个人资料图片的 URL。这确实需要额外的往返,但这是获取图像的最可靠方法。
从技术上讲,您还可以使用 URL https://s2.googleusercontent.com/s2/photos/profile/id?sz=size
,然后将重定向到最终 URL。 id
是 Google 用户 ID 或旧的 Google 个人资料用户名之一(对于拥有它们的用户仍然存在,但我认为您不能再创建新用户名了)。 size
是所需的照片大小(以像素为单位)。我几乎可以肯定,这不是记录在案的受支持功能,因此我不会依赖它来处理任何重要的事情,因为它可能随时消失,恕不另行通知。但对于快速原型或小型一次性应用程序,这可能就足够了。
【讨论】:
这是否记录在任何地方? 是的,贾斯汀似乎是对的......这不再有效。【参考方案12】:简单的答案:没有
您必须查询人员 API 并获取个人资料 image.url 数据才能获取照片。 AFAIK 包含用户 ID 的 url 没有默认格式。
【讨论】:
你确定吗?我想知道他们是否有计划做这样的事情?无论如何,谢谢。 如果您查看不同的配置文件并查看 html 输出,例如使用 chrome 中的“检查元素”,您会看到它们都是不同的,并且不包含用户 ID。官方文档上也没有任何内容。 既可以获取图像,也可以设置要查找的特定大小。请参阅下面的答案。 当问题和这个答案发布时是不可能的:)以上是关于使用 user_id 获取 Google+ 个人资料图片网址的主要内容,如果未能解决你的问题,请参考以下文章
使用 facebook graph API v3.2 从其他 user_id 获取数据
从 google plus 个人资料中获取经验值和等级或从 google plus 个人资料中获取数据