【问题标题】:How to determine if a Facebook user has uploaded a profile picture or its default?如何确定 Facebook 用户是否上传了个人资料图片或其默认值?
【发布时间】:2011-07-30 03:18:43
【问题描述】:

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

【问题讨论】:

    标签: facebook api detect image facebook-fql


    【解决方案1】:

    如果用户没有照片,那么当您请求指定了“照片”字段的用户对象时,is_silhouette 字段将为真。

    示例请求:

    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;
    
    }
    

    【讨论】:

      【解决方案2】:

      从我对 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);
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用下面的 Python 脚本(未提及任何编程语言)使其工作。

        urllib.urlopen('https://graph.facebook.com/<PROFILE_ID>/picture?access_token=%s' % access_token).geturl()
        

        这将为您提供 Facebook 个人资料照片 URL。如果该 URL 包含 则它会上传图像。否则上传默认 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
        

        我希望这会有所帮助。

        【讨论】:

        • 对于 PHP 开发人员,您可以使用:&lt;?php print_r(get_headers("https://graph.facebook.com/&lt;PROFILE_ID&gt;/picture?access_token=" . $access_token)); ?&gt; 并在 header 中找到位置 :)
        • 男性和女性有不同的图片。所以弄清楚男性/女性的位置。也可以通过校验和检查文件。
        • 你怎么看,然后多久更改一次这些 gif 文件的位置?
        • 我不认为......他们需要改变......如果仍然如此,那么您需要继续检查这些位置。
        猜你喜欢
        • 2012-12-15
        • 2019-06-04
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 2016-05-22
        相关资源
        最近更新 更多