通过Id获取用户头像

Posted

技术标签:

【中文标题】通过Id获取用户头像【英文标题】:Get user profile picture by Id 【发布时间】:2012-07-11 15:34:22 【问题描述】:

我现在正在开发一个主要基于 facebook graph api 的 Web 应用程序。 我持有一些关于用户的数据——实际上,可能是可用的公共数据——例如姓名和身份证。 我也知道个人资料图片是公共数据的一部分,我想知道如何仅通过使用用户的 id 才能获得指向用户个人资料图片的直接链接?

提前致谢

【问题讨论】:

Facebook API - How do I get a Facebook user's profile image through the Facebook API (without requiring the user to "Allow" the application)的可能重复 【参考方案1】:

http://graph.facebook.com/" + facebookId + "/picture?type=square 例如: http://graph.facebook.com/67563683055/picture?type=square

除了“方形”之外,还有更多的尺寸。见the docs。

2020 年 9 月更新 由于 Facebook 更新了他们的文档,这种方法在没有令牌的情况下不再有效。您需要附加某种access_token。您可以在graph api of user picturegraph api of user picture的 fb 文档中找到更多信息以及如何正确执行此操作

需求变更 此端点支持应用范围用户 ID (ASID)、用户 ID (UID) 和页面范围用户 ID (PSID)。目前您可以无要求地查询 ASID 和 UID。但是,从 2020 年 10 月 24 日开始,所有基于 UID 的查询都需要访问令牌。如果您查询一个 UID,因此必须包含一个令牌:

对 Facebook 登录身份验证请求使用用户访问令牌 对页面范围的请求使用页面访问令牌 对服务器端请求使用应用访问令牌 对移动或 Web 客户端请求使用客户端访问令牌

fb 文档的引用

【讨论】:

对于任何想要文档链接的人:developers.facebook.com/docs/graph-api/reference/user/picture 最好查看文档,因为它们也有所有其他选项。例如,如果你想要一个大的方形图像(因为方形默认很小),你必须使用https://graph.facebook.com/facebookId/picture?type=large&width=720&height=720 有没有办法只查询图片网址而不是图片本身?如果可能的话,想在前端上传图片而不是通过服务器 使用 redirect=0 获取 JSON 描述(包括 url)而不是图像本身 2020 年 9 月更新:您现在需要传递某种令牌才能获取图片。有关 fb 文档的更多信息:developers.facebook.com/docs/graph-api/reference/user/picture【参考方案2】:

您可以使用以下网址获取不同大小的个人资料图片。 请确保将 Facebook id 添加到 url。

大尺寸照片 https://graph.facebook.com/facebookId/picture?type=large

中等尺寸的照片 https://graph.facebook.com/facebookId/picture?type=normal

小尺寸照片 https://graph.facebook.com/facebookId/picture?type=small

方形照片 https://graph.facebook.com/facebookId/picture?type=square

【讨论】:

这就是我发现自己的 FacebookId 的方式:developers.facebook.com/tools/explorer/…【参考方案3】:

获取最大尺寸的图片

https://graph.facebook.com/userID?fields=picture.width(720).height(720) 

或任何其他您需要的尺寸。根据经验, type=large 并不是您可以获得的最大结果。

【讨论】:

也可以通过:graph.facebook.comuserID?fields=picture.type(large) 当你有这样的东西时,这很有用, String url = "graph.facebook.com/me?fields=id,name,email,picture.type(large) 如在其他答案中提到的那样可以用 normal,small,square 替换 large... 这不需要访问令牌(现在)吗?【参考方案4】:

来自Graph API documentation。

/OBJECT_ID/picture 返回到对象图片的重定向(在本例中为用户) /OBJECT_ID/?fields=picture 返回图片的网址

例子:

<img src="https://graph.facebook.com/4/picture"/> 使用 HTTP 301 重定向到 Zuck 的个人资料图片

https://graph.facebook.com/4?fields=picture 返回 URL 本身

【讨论】:

唉,它不再出现在 Graph API 文档的主页上,它现在在这里:developers.facebook.com/docs/graph-api/using-graph-api NO,它不在 Graph API 文档的首页。你最好避免关于 SO 的时间约束语句。你知道.. 那些日子变化很快...... 具有讽刺意味的是,您的答案比图形 api 页面更有用:-)【参考方案5】:

这将是有用的链接:

http://graph.facebook.com/893914824028397/picture?type=large&redirect=true&width=500&height=500

您可以根据需要设置高度和宽度

893914824028397facebookid

【讨论】:

【参考方案6】:

2020 年 9 月更新

Facebook 有新的要求变更:所有基于 UID 的查询都需要访问令牌

所以你必须将你的应用访问令牌添加到 url:

https://graph.facebook.com/profile_id/picture?type=large&access_token=app_access_token

要获取您的app_access_token,请使用以下网址:

https://graph.facebook.com/oauth/access_token?client_id=your-app-id&client_secret=your-app-secret&grant_type=client_credentials

您可以在 Facebook 开发人员的 Facebook 应用的基本设置中找到 your-app-idyour-app-secret

【讨论】:

嘿,是否有一些库用于响应?似乎“react-avatar”包还不支持这个 @dim 尝试为您正在使用的 FB 帐户“允许”该 FB 应用【参考方案7】:

https://www.avatars.io/

这是一个 API,当为各种社交网络(包括 Twitter、Facebook、Instagram 和 gravatar)提供用户名时,它会返回个人资料图像。它拥有适用于 iosandroid、Ruby、Node、php、Python 和 javascript 的库。

【讨论】:

这真是太棒了!只是因为 SO 喜欢更详细地描述链接;它是一个 API,当为各种社交网络(包括 Twitter、Facebook、Instagram 和 gravatar)提供用户名时,它会返回个人资料图像。它具有适用于 iOS、Android、Ruby、Node、PHP、Python 和 JavaScript 的库。一款非凡的软件。可以找到on GitHub。 这个服务和 GitHub repo 好像已经下架了☹【参考方案8】:

您可以使用此网址获得它:您将获得图片高清(最大尺寸)

https://graph.facebook.com/userID?fields=picture.width(720).height(720)&redirect=false

不要忘记redirect=false,否则会返回错误

【讨论】:

【参考方案9】:

在 img 标签的 src 中使用 url 作为:https://graph.facebook.com/user_id/picture?type=square。 类型可以是small,large。

【讨论】:

【参考方案10】:

您可以为此使用 AngularJs,它的双向数据绑定功能将以最少的工作量和更少的代码获得解决方案。

<div> <input type="text" name="" ng-model="fbid"><br/> <img src="https://graph.facebook.com/fbid/picture?type=normal"> </div>

我希望这能回答您的问题。注意:您也可以使用其他库。

【讨论】:

【参考方案11】:

通过Javascript SDK (v2.12 - April, 2017)可以通过这种方式获取图片请求的详细信息:

FB.api("/" + uid + "/picture?redirect=0", function (response) 
  console.log(response);

  // prints the following:
  //data: 
  //  height: 50
  //  is_silhouette: false
  //  url: "https://lookaside.facebook.com/platform/profilepic/?asid=…&height=50&width=50&ext=…&hash…"
  //  width: 50
  //

  if (response && !response.error) 
    // change the src attribute of img elements
    [...document.getElementsByClassName('fb-user-img')].forEach(
      i => i.src = response.data.url
    );

    // OR redirect to the URL above
    location.assign(response.data.url);
  
);

为了获取 JSON 响应,参数 redirect0(零)为值很重要,因为请求默认重定向到图像。您仍然可以在同一 URL 中添加其他参数。例子:

"/" + uid + "/picture?redirect=0&amp;width=100&amp;height=100":将返回一个 100x100 的图像; "/" + uid + "/picture?redirect=0&amp;type=large":返回一个 200x200 的图像。其他可能的类型值包括:smallnormalalbumsquare

【讨论】:

【参考方案12】:

根据当前最新的 Facebook API 版本 3.2,对于用户,您可以使用此通用方法获取个人资料图片https://graph.facebook.com/v3.2/user-id/picture?type=square,您可以访问用户图片文档here。 URL中type参数的可能值可以是small、normal、album、large、square

对于群组和Pages,个人资料图片不能直接使用。您必须使用访问令牌获取它们。对于组,您必须使用用户访问令牌,对于页面,您可以同时使用用户访问令牌和页面访问令牌。

您可以使用通用 URL:https://graph.facebook.com/v3.2/user-id/picture?access_token=access-token&type=square 获取群组或主页的个人资料图片

我希望这对正在寻找主页或群组资料图片的人有所帮助。

【讨论】:

对于大多数页面,我得到的页面个人资料图片没有访问令牌,但对于某些页面,它返回一个问号图像作为以下格式的响应。 "data": "is_silhouette": true, "url": "static.xx.fbcdn.net/rsrc.php/v3/y6/r/_xS7LcbxKS4.gif" 任何线索?【参考方案13】:

只需按照以下网址进行操作

https://graph.facebook.com/facebook_user_id/picture?type=square

类型可以是普通、小、中、大。或者正方形(如果你想得到正方形的图片,正方形的大小限制为50x50)。

【讨论】:

如果你想得到方形图片。方形尺寸限制为50x50。 更多详情请关注 Facebook Graph API developers.facebook.com/docs/graph-api/reference/v3.2/user/…【参考方案14】:

今天我发现一个问题,头像返回默认头像,因为new requirement from Facebook对所有基于UID的查询,所以只需将&amp;access_token=[apptoken]添加到url,您可以获得您的应用令牌from here

【讨论】:

【参考方案15】:

您可以使用以下端点来获取 image.jfif 而不是 jpg:

https://graph.facebook.com/v3.2/user-id/picture

请注意,您将无法看到该图像,只能下载它。

【讨论】:

【参考方案16】:

2021 年 7 月更新

在@EddyG 的回答之上,事实证明,如果您仍然无法使用应用访问令牌获取个人资料图片,则 FB 帐户必须首先“允许”FB 应用程序,然后您应该能够获取个人资料图片带有 FB 应用访问令牌。

【讨论】:

以上是关于通过Id获取用户头像的主要内容,如果未能解决你的问题,请参考以下文章

使用 FBSDKLoginkit 获取用户名和头像

获取授权用户的头像(Instagram Basic Display API)

从 Facebook iOS 7 获取用户名和头像

phpcms 用户修改头像

Android中通过访问本地相册或者相机设置用户头像

微信小程序开发用户头像昵称获取规则调整 2022