Как определить, загрузил ли пользователь Facebook изображение профиля или по умолчанию?

#facebook #api #detect #image #facebook-fql

#Facebook #API #обнаружение #изображение #facebook-fql

Вопрос:

Есть ли способ узнать, загрузил ли пользователь изображение в профиль, или у него есть изображение Facebook по умолчанию через FQL или что-то еще?

Ответ №1:

Если у пользователя нет фотографии, то поле is_silhouette будет иметь значение true при запросе объекта user с указанным полем «photo».

Пример запроса:

 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 amp;amp; !$user->picture->data->is_silhouette) return true;

        endif;

        return false;

}
  

Ответ №2:

Вы можете использовать приведенный ниже скрипт Python (поскольку не упоминается ни один язык программирования), чтобы заставить его работать.

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

Это предоставит вам URL-адрес фотографии Facebook. Если этот URL содержит <PROFILE_ID>, то он загружает изображение. В противном случае загружается изображение 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
  

Я надеюсь, это поможет.

Комментарии:

1. Для разработчиков PHP вы можете использовать: <?php print_r(get_headers("https://graph.facebook.com/<PROFILE_ID>/picture?access_token=" . $access_token)); ?> И найти местоположение в заголовке 🙂

2. Для мужчин и женщин используются разные фотографии. Итак, выясните, как и в каких местах для мужчин / женщин. Также можно проверять файлы по контрольной сумме.

3. Как вы думаете, как часто затем меняются местоположения этих gif-файлов?

4. я не думаю … что их нужно менять … если все еще, то вам нужно продолжать проверять эти местоположения.

Ответ №3:

Из моих экспериментов с Facebook API получается, что нужно действительно получить изображение, чтобы определить, является ли оно статическим по умолчанию или нет.

На момент написания статьи кажется, что все загруженные фотографии на Facebook конвертируются в JPEG, в то время как статические изображения по умолчанию находятся в формате GIF. (Кстати, это не соответствует некоторым размерам миниатюр).

Поиск определенного GIF-файла или определенного URL-адреса ненадежен (обратите внимание, что задействованы URL-адреса CDN и что существуют разные статические файлы для мужчин и женщин). Предполагая, что 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);
}