Получение профиля профиля Facebook от пользователя (через график) – определить, является ли это пустым (т.е. по умолчанию) образ?

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

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

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

Он работает хорошо – я получаю несколько фотографий профиля, но некоторые выглядят так: http://img.ruphp.com/php/yDnr5YfbJCH.gif

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

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

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

 <?php $photo1 = "http://graph.facebook.com/2131243434/picture?type=large"; $photo2 = "http://img.ruphp.com/php/HsTZSDw4avx.gif"; if (md5(file_get_contents($photo1)) == md5(file_get_contents($photo2))) { echo "NO PICTURE"; } else { echo "REAL PICTURE"; } ?> 

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

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

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://img.ruphp.com/php/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 является образцом по умолчанию .

Принятие этого суждения на основе «inline» потребует 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."; 

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

Если вы уже обращаетесь к 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" } } }