如何确定Facebook用户是否上传了个人资料图片或其默认设置?

时间:2011-04-05 16:30:01

标签: facebook api detect image facebook-fql

有没有办法知道用户是将图片上传到个人资料还是通过FQL或其他方式拥有Facebook的默认用户图片?

3 个答案:

答案 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);
}