我正在尝试获取在客户的Facebook页面上评论的人物的个人资料照片,因此可以在网站上显示等。
我通过/[page_name]/feed/
图表调用获取用户ID,我将其放入如下的网址格式:
$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
我想只显示真实的个人资料照片 - 有没有办法检测到它?
答案 0 :(得分:24)
Graph API确实包含一个标志,可以让您检测用户的Facebook头像是否是默认的...
您可以将&redirect=false
附加到图表图片网址的末尾来完成此操作。
例如:
正常的图片网址,例如
http://graph.facebook.com/[USERNAME]/picture?type=large
将重定向到实际的图像文件,给人留下返回实际图像的印象。 但是像
这样的网址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/)
<强>更新强>
URI已更改:type=large
不再有效,您现在必须指定显式宽度/高度,如下所示:
http://graph.facebook.com/[USERNAME]/picture?width=200&height=600
请注意"is_silhouette"
属性 - 它将是true
或false
。如果是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.";
答案 1 :(得分:1)
这是可行的,但需要文件比较。 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作业来验证后端的图像。 您可以通过在db中存储默认头像的md5来稍微优化它,因此只需要获取1个URL进行比较。
这可以做为更改证明,使用图表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
(我想测试的用户)
答案 2 :(得分:0)
哈希默认图像,存储默认男/女的哈希,比较?
答案 3 :(得分:0)
如果您已经调用Graph API来获取像头像这样的用户数据,请不要像上面建议的那样对/picture
进行额外的API调用。
当您第一次调用Graph API时,只需在fields参数中加入picture
,如果设置为true,则响应将包含is_silhouette
偏移量用户具有默认头像。
请求:
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"
}
}
}