有没有办法知道用户是将图片上传到个人资料还是通过FQL或其他方式拥有Facebook的默认用户图片?
答案 0 :(得分:23)
如果用户没有照片,那么当您请求指定了“照片”字段的用户对象时,is_silhouette字段将为true。
示例请求:
https://graph.facebook.com/username?fields=picture
响应:
{
"id": "100002095576350",
"picture": {
"data": {
"url": "http://profile.ak.fbcdn.net/static-ak/rsrc.php/v2/yo/r/UlIqmHJn-SK.gif",
"is_silhouette": true
}
}
}
快速,脏的PHP功能:
function facebook_user_has_photo($username_or_id){
$request = file_get_contents('https://graph.facebook.com/'.$username_or_id.'?fields=picture');
if($request):
$user = json_decode($request);
if($user && !$user->picture->data->is_silhouette) return true;
endif;
return false;
}
答案 1 :(得分:8)
您可以使用下面的Python脚本(未提及任何编程语言)使其正常工作。
urllib.urlopen('https://graph.facebook.com/<PROFILE_ID>/picture?access_token=%s' % access_token).geturl()
这将为您提供Facebook个人资料照片网址。如果该网址包含&lt; PROFILE_ID&gt;然后它上传一张图片。否则,将上传默认的Facebook图像。
例如,如果已上传图片:
http://profile.ak.fbcdn.net/hprofile-ak-snc4/195361_<PROFILE_ID>_4179703_q.jpg
否则:
男性:
http://b.static.ak.fbcdn.net/rsrc.php/v1/yo/r/UlIqmHJn-SK.gif
女性:
https://fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v1/y9/r/IB7NOFmPw2a.gif
我希望这会有所帮助。
答案 2 :(得分:3)
从我对Facebook API的实验来看,似乎必须实际获取图片才能判断它是否是静态默认值。
在撰写本文时,似乎Facebook上所有上传的照片都转换为JPEG,而静态默认图片则采用GIF格式。 (顺便说一句,这与某些缩略图大小不一致)。
寻找特定的GIF文件或特定的URL路径是不可靠的(请注意,涉及CDN URL,并且男性和女性都有不同的静态文件)。假设Facebook不对其整个个人资料照片数据库进行重新编码,我认为寻找GIF足够可靠。
这是一个示例PHP函数。我已经和我的120位Facebook好友一起成功测试了它,它似乎可以完成这项工作。
public static function hasProfilePicture($fbuid)
{
/* Really stupid method to test if Facebook user has real profile picture
* based on Facebook returning a GIF image when you request a large photo.
* Use with care - for every profile there's an outgoing request! */
$r = get_headers("http://graph.facebook.com/$fbuid/picture?type=square");
return !array_search("Content-Type: image/gif",$r);
}