Получение изображения профиля Facebook от пользователя (через График) - определить, является ли оно пустым (то есть по умолчанию) изображением? - PullRequest
3 голосов
/ 02 ноября 2011

Я пытаюсь получить фотографии профиля людей, комментирующих страницу клиента в Facebook, чтобы они могли отображаться на веб-сайте и т. Д.

Я получаю идентификаторы пользователей с помощью графического вызова /[page_name]/feed/, и я помещаю это в форму URL следующим образом:

$id = $item['from']['id'];
$link = "http://graph.facebook.com/{$id}/picture?type=large";

Работает хорошо - я получаю несколько фотографий профиля, но некоторые выглядят так: http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yp/r/yDnr5YfbJCH.gif

Я хочу показать только реальные фотографии профиля - есть ли способ обнаружить это?

Ответы [ 4 ]

24 голосов
/ 18 января 2013

API Graph включает флаг, который позволяет вам определить, является ли аватар пользователя на Facebook аватаром по умолчанию ...

Вы можете сделать это, добавив &redirect=false в конец URL-адреса вашего графика.

Например:

Обычный URL-адрес изображения, например

http://graph.facebook.com/[USERNAME]/picture?type=large

будет перенаправлять на фактический файл изображения, создавая впечатление возврата фактического изображения. Но URL, такой как

http://graph.facebook.com/[USERNAME]/picture?type=large&redirect=false

вернет JSON - что-то вроде:

{"data": {
    "url": "http://profile.ak.fbcdn.net/hprofile-ak-snc6/623549_1210877749_349605729_n.jpg",
    "is_silhouette": false
}}

(источник: http://developers.facebook.com/docs/reference/api/using-pictures/)

UPDATE: URI изменился: type=large больше не работает, теперь вы должны указать явную ширину / высоту следующим образом:

http://graph.facebook.com/[USERNAME]/picture?width=200&height=600

Обратите внимание на атрибут "is_silhouette" - это будет true или false. Если true, изображение пользователя на Facebook будет по умолчанию .

Для принятия этого решения на «встроенной» основе потребуется cURL, и вы можете интегрировать его с вашим кодом примерно так:

// Setup
$id = $item['from']['id'];
$link = "http://graph.facebook.com/{$id}/picture?type=large";

// Get avatar info from FB via cURL
$url = $link. "&redirect=false";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$avatarInfo = curl_exec($ch);
curl_close($ch); 

// Process cURL response
$isDefaultAvatar = false;
if ($avatarInfo)
{
    $avatarInfo = json_decode($avatarInfo);
    if (isset($avatarInfo->data->is_silhouette) && $avatarInfo->data->is_silhouette) $isDefaultAvatar = true;
}

// Output
echo "This " .($isDefaultAvatar ? "IS" : "IS NOT"). " a default avatar.";
1 голос
/ 02 ноября 2011

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

Простым сравнением будет сравнение обоих из них после преобразования их байтов в строки. Простейший пример:

<?php

$photo1 = "http://graph.facebook.com/2131243434/picture?type=large";
$photo2 = "http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yL/r/HsTZSDw4avx.gif";
if (md5(file_get_contents($photo1)) ==  md5(file_get_contents($photo2))) {
       echo "NO PICTURE";
}
 else {
echo "REAL PICTURE";
}


?>

Это будет медленная операция, так что вы можете поставить ее как задание cron для проверки изображений в бэкэнде. Вы можете немного оптимизировать его, сохранив md5 аватара по умолчанию в дБ, поэтому для сравнения нужно выбрать только 1 URL.

Это можно сделать CHANGE PROOF, используйте графическую ссылку api, которая обязательно вернет аватар по умолчанию, тогда вам не нужно беспокоиться об изменении изображения аватара по умолчанию, вам просто нужно сравнить 2 графических API URL. например. сравнить: а) http://graph.facebook.com/MY_TEST_ID/picture?type=large (это всегда возвращает аватар по умолчанию) б) http://graph.facebook.com/MY_NEW_USER_ID/picture?type=large (пользователь, которого я хочу протестировать)

0 голосов
/ 04 августа 2016

Если вы уже вызываете API Graph для получения пользовательских данных, таких как аватар, не выполняйте дополнительный вызов API для /picture, как предложено выше.

Просто включите picture в поля param при первом вызове Graph API, тогда ответ будет содержать смещение is_silhouette, если для него установлено значение true, установленное пользователемаватар по умолчанию.

Запрос:

https://graph.facebook.com/v2.7/me?access_token=[token]&fields=name,picture

Ответ:

{
    "id": "100103095474350",
    "name": "John Smith",
    "picture": {
        "data": {
            "is_silhouette": true,
            "url": "https://scontent.xx.fbcdn.net/v/...jpg"
        }
    }
}
0 голосов
/ 02 ноября 2011

Хэш-изображение по умолчанию, сохранить хэш для мужской / женский по умолчанию, сравнить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...