我现在正在开发一个主要基于 facebook graph api 的 web 应用程序。我持有一些关于用户的数据——实际上,可能是可用的公共数据——例如姓名和身份证。我也知道个人资料图片是公共数据的一部分,我想知道如何仅通过使用他的 id 才能直接链接到用户的个人资料图片?
提前致谢
我现在正在开发一个主要基于 facebook graph api 的 web 应用程序。我持有一些关于用户的数据——实际上,可能是可用的公共数据——例如姓名和身份证。我也知道个人资料图片是公共数据的一部分,我想知道如何仅通过使用他的 id 才能直接链接到用户的个人资料图片?
提前致谢
http://graph.facebook.com/" + facebookId + "/picture?type=square 例如: http ://graph.facebook.com/67563683055/picture?type=square
除了“方形”之外,还有更多的尺寸。请参阅文档。
2020 年 9 月更新
随着 Facebook 更新了他们的文档,这种方法在没有令牌的情况下不再有效。您需要附加某种access_token
. 您可以在用户图片的图形 API的 fb 文档中找到更多信息以及如何正确执行此操作
要求更改 此端点支持应用范围内的用户 ID (ASID)、用户 ID (UID) 和页面范围内的用户 ID (PSID)。目前您可以无要求地查询 ASID 和 UID。但是,从 2020 年 10 月 24 日开始,所有基于 UID 的查询都需要访问令牌。如果您查询 UID 并因此必须包含令牌:
对 Facebook 登录身份验证的请求
使用用户访问令牌 对页面范围的请求使用页面
访问令牌 对服务器端请求
使用应用程序访问令牌 对移动或 Web 客户端请求使用客户端访问令牌
fb docs的报价
您可以使用以下网址获取不同大小的个人资料图片。请确保将 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
获得最大尺寸的图像
https://graph.facebook.com/{userID}?fields=picture.width(720).height(720)
或您需要的任何其他尺寸。根据经验, type=large 并不是您可以获得的最大结果。
来自Graph API 文档。
/OBJECT_ID/picture
返回到对象图片的重定向(在这种情况下是用户)/OBJECT_ID/?fields=picture
返回图片的 URL例子:
<img src="https://graph.facebook.com/4/picture"/>
使用 HTTP 301 重定向到 Zuck 的个人资料图片
https://graph.facebook.com/4?fields=picture
返回 URL 本身
这将是有用的链接:
http://graph.facebook.com/893914824028397/picture?type=large&redirect=true&width=500&height=500
您可以根据需要设置高度和宽度
893914824028397是facebookid
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-id
找到your-app-secret
它是一个 API,当为各种社交网络(包括 Twitter、Facebook、Instagram 和 gravatar)提供用户名时,它会返回个人资料图像。它具有适用于 iOS、Android、Ruby、Node、PHP、Python 和 JavaScript 的库。
您可以使用此网址获得它:您将获得高清图片(最大尺寸)
https://graph.facebook.com/{userID}?fields=picture.width(720).height(720)&redirect=false
不要忘记 redirect=false,否则会返回错误
在 img 标签的 src 中使用 url 作为:https://graph.facebook.com/user_id / picture?type=square。类型可能小,大。
您可以为此使用 AngularJs,它的双向数据绑定功能将以最少的工作量和更少的代码获得解决方案。
<div>
<input type="text" name="" ng-model="fbid"><br/>
<img src="https://graph.facebook.com/{{fbid}}/picture?type=normal">
</div>
我希望这能回答您的问题。注意:您也可以使用其他库。
通过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 响应,redirect
使用0(零)作为值的参数很重要,因为默认情况下请求重定向到图像。您仍然可以在同一 URL 中添加其他参数。例子:
"/" + uid + "/picture?redirect=0&width=100&height=100"
:将返回一个 100x100 的图像;"/" + uid + "/picture?redirect=0&type=large"
:返回一个 200x200 的图像。其他可能的类型值包括:small、normal、album和square。根据当前最新的 Facebook API 版本 3.2,对于用户,您可以使用此通用方法获取个人资料图片https://graph.facebook.com/v3.2/{user-id}/picture?type=square您可以在此处访问用户图片的文档。URL 中 type 参数的可能值可以是 small、normal、album、large、square
对于 Groups 和Pages,个人资料图片不直接可用。您必须使用访问令牌获取它们。对于组,您必须使用用户访问令牌,对于页面,您可以同时使用用户访问令牌和页面访问令牌。
您可以使用通用 URL 获取群组或页面的个人资料图片:https ://graph.facebook.com/v3.2/{user-id}/picture?access_token={access-token}&type=square
我希望这对正在寻找页面或组个人资料图片的人有所帮助。
只需按照以下网址
https://graph.facebook.com/facebook_user_id/picture?type=square
类型可能是正常,小,中,大。或正方形(如果您想获得正方形图片,正方形大小限制为 50x50)。
今天我发现了一个问题,个人资料图片返回了默认的个人资料图片,因为Facebook对所有基于 UID 的查询的新要求&access_token=[apptoken]
,所以只需添加到 url,您可以从这里获取您的应用程序令牌
您可以使用以下端点获取 image.jfif 而不是 jpg:
https://graph.facebook.com/v3.2/{user-id}/picture
请注意,您将无法看到图像,只能下载它。
2021 年 7 月更新
On top of answer by @EddyG, turned out that if you still not able to fetch the profile picture with app access token, the FB account must "allow" the FB app first then you should be able to fetch the profile picture with FB app access token.