获取带有user_id的Google+个人资料图片网址



我知道许多社交网络API提供了一种使用用户user_id或用户名构建用户个人资料图片URL的方法。对于Facebook来说,它看起来像这样:

http://graph.facebook.com/user_id/picture?type=square

现在Google Plus有这样的东西吗?或者任何其他无需API调用即可获取用户图片的方法?

谷歌已经改变了他们的政策,所以获取谷歌个人资料图片的旧方法现在将不起作用,这是

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"
    }
}

可以找到更多参数以发送 URL 从这里开始,您可能需要这些参数

有关更多详细信息,您还可以检查给定的问题,我已经回答了相同类型的问题如何通过谷歌加中的用户ID获取用户图像?

更新

:自 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(未找到(错误


所有这些网址都获取用户的个人资料图片:

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/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

最简单的就是直接使用喜欢的图片源:

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

如文章中所述 获取Google Plus 个人资料图片 使用 PHP .

方法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密钥。

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

更改:"s64"中的64

尺寸

如果要显示当前登录用户的个人资料图片,则甚至不需要知道{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">

您可以使用Google+ API的people.get方法获取个人资料图片的URL。 这确实需要额外的往返,但这是获取图像的最可靠方法。

从技术上讲,您也可以使用网址https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}然后重定向到最终到达网址。 {id}是Google用户ID或旧的Google个人资料用户名之一(对于拥有它们的用户来说,它们仍然存在,但我认为您不能再创建新的用户名了(。 {size}是照片的所需大小(以像素为单位(。 我几乎可以肯定这不是一个有文档记录的、受支持的功能,所以我不会依赖它来处理任何重要的事情,因为它可能随时消失,恕不另行通知。 但对于快速原型或小型一次性应用程序,它可能就足够了。

尝试

访问/s2/profile/photo URL 适用于大多数用户,但不是全部。

唯一完整的证明方法是使用Google+ API。您不需要用户身份验证来请求公共配置文件数据,因此这是一种相当简单的方法:

  1. 获取 Google+ API 密钥 https://cloud.google.com/console

  2. 发出一个简单的 GET 请求:https://www.googleapis.com/plus/v1/people/+<用户名>?key=

记下用户名前的 +。如果您改用用户 ID(一长串数字(,则不需要 +

  1. 您将获得配置文件数据的非常全面的JSON表示形式,其中包括:"图像":{"网址": "https://lh4.googleusercontent.com/.....图片网址的其余部分...."}
如果你使用

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='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 包含用户 ID 的 URL 没有默认格式。

相关内容

  • 没有找到相关文章

最新更新