从用户那里获取Facebook个人资料照片(通过图表) - 检测它是否为空白(即默认)图像?

3 php facebook facebook-graph-api

我正在尝试获取在客户的Facebook页面上评论的人物的个人资料照片,因此可以在网站上显示等.

我通过/[page_name]/feed/图形调用获取用户ID,并将其放入URL形式,如下所示:

$id = $item['from']['id'];
$link = "http://graph.facebook.com/{$id}/picture?type=large";
Run Code Online (Sandbox Code Playgroud)

它运作良好 - 我收到了一些个人资料图片,但有些图片如下:http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yp/r/yDnr5YfbJCH.gif

我想只显示真实的个人资料图片 - 有没有办法检测到这个?

Mat*_*abe 24

Graph API包含一个标志,允许您检测用户的Facebook头像是否是默认的...

您可以通过附加&redirect=false到图形图像URL的末尾来完成此操作.

例如:

一个正常的图像网址,如

http://graph.facebook.com/[USERNAME]/picture?type=large
Run Code Online (Sandbox Code Playgroud)

将重定向到实际的图像文件,给人留下返回实际图像的印象.但是一个网址如

http://graph.facebook.com/[USERNAME]/picture?type=large&redirect=false
Run Code Online (Sandbox Code Playgroud)

将返回JSON - 类似于:

{"data": {
    "url": "http://profile.ak.fbcdn.net/hprofile-ak-snc6/623549_1210877749_349605729_n.jpg",
    "is_silhouette": false
}}
Run Code Online (Sandbox Code Playgroud)

(来源:http://developers.facebook.com/docs/reference/api/using-pictures/)

更新: URI已更改:type=large不再有效,您现在必须指定显式宽度/高度,如下所示:

http://graph.facebook.com/[USERNAME]/picture?width=200&height=600
Run Code Online (Sandbox Code Playgroud)

注意"is_silhouette"属性 - 它将是truefalse.如果true,用户的脸书图像是默认图像.

在"内联"的基础上做出此判断将需要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.";
Run Code Online (Sandbox Code Playgroud)