我正在尝试获取在客户的 Facebook 页面上发表评论的人的个人资料照片,以便他们可以显示在网站等上。
我通过 /[page_name]/feed/
图表调用获取用户 ID,并将其放入 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
我只想显示真实的个人资料照片 - 有没有办法检测到这一点?
最佳答案
Graph API 确实包含一个标志,允许您检测用户的 facebook 头像是否是默认头像...
您可以通过将 &redirect=false
附加到图形图像 URL 的末尾来完成此操作。
例如:
一个普通的图片 url,例如
http://graph.facebook.com/[USERNAME]/picture?type=large
将重定向到实际图像文件,给人以返回实际图像的印象。 但是像
这样的 urlhttp://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/)
更新:
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.";
关于php - 从用户获取 Facebook 个人资料图片(通过 Graph)——检测它是否为空白(即默认)图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984041/