Как определить, загрузил ли пользователь Facebook изображение профиля или его значение по умолчанию? - PullRequest
5 голосов
/ 05 апреля 2011

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

Ответы [ 3 ]

23 голосов
/ 12 февраля 2013

Если у пользователя нет фотографии, тогда поле is_silhouette будет иметь значение true, если вы запросите объект пользователя с указанным полем «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 && !$user->picture->data->is_silhouette) return true;

        endif;

        return false;

}
8 голосов
/ 05 апреля 2011

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

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

Это предоставит вам URL-адрес фотографии профиля Facebook. Если этот 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

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

3 голосов
/ 06 мая 2011

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

На момент написания статьи все загруженные на 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);
}
...