我正在开发一个CMS,它可以从用户的Facebook URL(即http://facebook.com/users_unique_url)中获取用户的个人资料图像。我怎样才能做到呢?是否有一个facebook API调用,获取用户的个人资料图像URL,而不需要用户允许应用程序?
当前回答
显示:
50×50像素
<img src="//graph.facebook.com/{{fid}}/picture">
200像素宽度
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
保存(使用PHP)
注意:不要使用这个。请看下面@ forever的评论。
$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large');
$file = dirname(__file__).'/avatar/'.$fid.'.jpg';
file_put_contents($file, $img);
$fid是你在Facebook上的用户id。
注意:对于标记为“18+”的图像,您将需要18+用户的有效access_token:
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
2015年更新:
Graph API v2.0不能使用用户名查询,您应该始终使用userId。
其他回答
通过这个URL简单地获取数据:
http://graph.facebook.com/userid_here/picture
将userid_here替换为您想获取照片的用户的id。你也可以使用HTTPS。
可以使用PHP的file_get_contents函数读取URL并处理检索到的数据。
资源:
http://developers.facebook.com/docs/api
注意:在PHP .ini中,您需要确保OpenSSL扩展已启用,以便使用PHP的file_get_contents函数读取该URL。
更新:
从2012年8月底开始,API已经更新,允许您检索不同大小的用户头像。添加可选的宽度和高度字段作为URL参数:
https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT
其中WIDTH和HEIGHT是您请求的维度值。
这将返回一个最小宽度x高度的头像,同时尝试保持纵横比。例如,
https://graph.facebook.com/redbull/picture?width=140&height=110
返回
{
"data": {
"url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/c0.19.180.142/s148x148/2624_134501175351_4831452_a.jpg",
"width": 148,
"height": 117,
"is_silhouette": false
}
}
最后更新
要获取用户的头像,请呼叫
https://graph.facebook.com/USER_ID/picture
其中USER_ID可以是用户id号或用户名。
要获取特定大小的用户头像,请调用
https://graph.facebook.com/USER_ID/picture?type=SIZE
哪里SIZE应该替换为其中一个单词
square
small
normal
large
这取决于你想要的尺寸。
这个调用将返回一个URL到单个图像,其大小基于您所选择的类型参数。
例如:
https://graph.facebook.com/USER_ID/picture?type=small
返回图像的一个小版本的URL。
API只指定配置文件图像的最大大小,而不是实际大小。
广场:
最大宽度和高度为50像素。
小
最大宽度为50像素,最大高度为150像素。
正常的
最大宽度为100像素,最大高度为300像素。
大
最大宽度为200像素,最大高度为600像素。
如果你调用默认的USER_ID/picture,你会得到方形类型。
澄清
如果你打电话(如上例所示)
https://graph.facebook.com/redbull/picture?width=140&height=110
如果你使用的是Facebook sdk的请求方法,它会返回一个JSON响应。否则它将返回图像本身。要始终检索JSON,添加:
&redirect=false
像这样:
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
将此作为已接受答案的评论,但觉得它值得更长的解释。从2015年4月开始,这可能会提高几次。
As of V2 of the graph api the accepted answer no longer works using a username. So now you need the userid first, and you can no longer use a username to get this. To further complicate matters, for privacy reasons, Facebook is now changing userid's per app (see https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ and https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids ), so you will have to have some kind of proper authentication to retrieve a userid you can use. Technically the profile pic is still public and available at /userid/picture (see docs at https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture and this example user: http://graph.facebook.com/v2.2/4/picture?redirect=0) however figuring out a user's standard userid seems impossible based just on their profile - your app would need to get them to approve interaction with the app which for my use case (just showing a profile pic next to their FB profile link) is overkill.
如果有人想出了一种方法来获得基于用户名的个人资料图片,或者,如何获得一个用户id(甚至是一个交替的)来检索个人资料图片,请分享!与此同时,旧的图形url在2015年4月之前仍然有效。
显示:
50×50像素
<img src="//graph.facebook.com/{{fid}}/picture">
200像素宽度
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
保存(使用PHP)
注意:不要使用这个。请看下面@ forever的评论。
$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large');
$file = dirname(__file__).'/avatar/'.$fid.'.jpg';
file_put_contents($file, $img);
$fid是你在Facebook上的用户id。
注意:对于标记为“18+”的图像,您将需要18+用户的有效access_token:
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
2015年更新:
Graph API v2.0不能使用用户名查询,您应该始终使用userId。
简单的一行代码,保存完整尺寸的档案图像在您的服务器上。
<?php
copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");
?>
只有在php.ini中启用了openssl,这才有效。
推荐文章
- 编写器更新和安装之间有什么区别?
- 本地机器上的PHP服务器?
- 如何评论laravel .env文件?
- Android Facebook集成无效键散列
- 在PHP中检测移动设备的最简单方法
- 如何在树枝模板中呈现DateTime对象
- 如何创建Android Facebook密钥哈希?
- 如何删除查询字符串,只得到URL?
- 您是否可以“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
- 非法字符串偏移警告PHP
- 从数组中获取随机项
- 为什么一个函数检查字符串是否为空总是返回true?
- 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?
- 如何增加php的最大执行时间
- 将给定日期与今天进行比较