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