Google api 获取谷歌&x2B;用户id为的配置文件图片url

Google api 获取谷歌&x2B;用户id为的配置文件图片url,google-api,google-plus,Google Api,Google Plus,我知道,很多社交网络API都提供了一种方法,可以使用用户id或用户名构建指向用户个人资料图片的url。对于Facebook,它看起来是这样的: http://graph.facebook.com/user_id/picture?type=square 现在谷歌+(Google Plus)有这样的功能吗?或者任何其他无需API调用就能获取用户图片的方法???简单回答:否 您必须查询person API并获取个人资料数据才能获得照片。AFAIK没有包含用户ID的url的默认格式。您可以使用Googl

我知道,很多社交网络API都提供了一种方法,可以使用用户id或用户名构建指向用户个人资料图片的url。对于Facebook,它看起来是这样的:

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

现在谷歌+(Google Plus)有这样的功能吗?或者任何其他无需API调用就能获取用户图片的方法???

简单回答:否


您必须查询person API并获取个人资料数据才能获得照片。AFAIK没有包含用户ID的url的默认格式。

您可以使用Google+API的方法获取配置文件图像的url。这确实需要额外的往返行程,但这是获得图像的最可靠方式


从技术上讲,您也可以使用URL
https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}
然后将重定向到最终URL
{id}
是Google用户id或一个旧的Google配置文件用户名(对于拥有它们的用户,它们仍然存在,但我认为您不能再创建新的)
{size}
是照片所需的像素大小。我几乎可以肯定这不是一个文档化的、受支持的功能,所以我不会依赖它来做任何重要的事情,因为它可能会在任何时候不经通知就消失。但对于快速原型或小型一次性应用程序,这可能就足够了。

更新:谷歌停止支持此方法,现在返回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获得的相同图像url,这是一个丑陋的链接
lh6.googleusercontent.com//x1W2-XNKA-A/aai/aaaaaaaaa/ooSNulbLz8U/photo.jpg

最简单的方法是直接使用like图像源:

<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]>";
$headers=获取标题(“https://www.google.com/s2/photos/profile/{user_id}”,1);
回声“;

如文章所述。

更新:以下方法自2015年起不再有效

可以获取配置文件图片,甚至可以设置其大小:

https://plus.google.com/s2/photos/profile/<user_id>?sz=<your_desired_size>
与图像标记一起使用:

<img src="https://plus.google.com/s2/photos/profile/116018066779980863044?sz=100" width="100" height="100">


希望你能成功

如果要显示当前登录用户的配置文件图片,您甚至不需要知道{user_id}。只需使用
https://plus.google.com/s2/photos/profile/me
就足够了。

尝试访问/s2/profile/photo url对大多数用户有效,但不是所有用户都有效

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

  • 在上获取Google+API密钥

  • 向:?密钥发出简单的GET请求=

  • 注意用户名前的+。 如果改用用户ID(长串数字),则不需要+

  • 您将获得概要文件数据的非常全面的JSON表示,其中包括: “图片”:{“url”:“…图片url的其余部分…”

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

    新的方法是

    请求URL

    https://www.googleapis.com/plus/v1/people/115950284...320?fields=image&key={YOUR_API_KEY}
    
    这将提供如下所示的json格式的Google概要文件图像url

    答复:

    {
        "image": 
        {
             "url": "https://lh3.googleusercontent.com/-OkM...AANA/ltpH4BFZ2as/photo.jpg?sz=50"
        }
    }
    

    您可能需要从URL发送更多参数

    有关更多详细信息,您还可以查看我针对相同类型问题回答的给定问题

    方法1:(不再有效)

    方法3:(不需要api密钥)

    您可能会注意到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'};
    
    $data=file\u get\u contents('http://picasaweb.google.com/data/entry/api/user/?alt=json');
    $d=json_解码($data);
    $avatar=$d->{'entry'}->{'gphoto$thumbnail'}->{'t'};
    
    //输出示例:


    更改:尺寸为“s64”的64尝试了所有可能的方法。。这是最后一段工作代码。希望它能帮助正在寻找它的人

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

    如果您使用flatter,那么您可以通过
    people.googleapis.com
    端点访问它,code使用
    库中的
    谷歌签名

    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'];
    }
    
    其中
    url
    是一个可访问的图像url。

    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">
    
    
    
    你确定吗?我想知道他们是否有计划做这样的事情?无论如何,谢谢。如果你看不同的配置文件,看html输出,例如chrome中的“inspect element”,你会发现它们都是不同的,不包含用户ID。此外,官方文件上没有任何内容。这是可能的,既可以获取图像,也可以设置要查找的特定大小。请看下面我的答案。当问题和答案贴在哪里时,这是不可能的:)我打开了一个功能请求,如果谷歌实现了它,你可以启动它来获取更新。这里有一个相反的例子。例如,将你的StackOverflow天赋嵌入到你的Google+个人资料中:这个问题的答案自2012年以来改变了太多次。我在2020年发布了一个有效的答案——不知道需要多长时间:)无需为每个请求发出HTTP请求,请参阅我的答案。这有任何记录吗?虽然这非常有效,但我不会这样做,因为谷歌可能会停止支持这一点,因为我没有
    $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'};
    
        <?
    $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;
    ?>
    
    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}]
    }
    
    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">