如何只获取上传了头像的朋友,而忽略那些默认剪影的用户?

Posted

技术标签:

【中文标题】如何只获取上传了头像的朋友,而忽略那些默认剪影的用户?【英文标题】:How to get only friends with profile photos uploaded, and ignore those users with the default silhouette? 【发布时间】:2012-05-31 05:35:14 【问题描述】:

我想不出只用头像来交朋友的方法。我可以使用多查询来检查每个朋友是否有照片,但这会导致流量很大。

还有其他选择吗?

【问题讨论】:

你能定义什么是没有照片的朋友吗?您是指测试用户显示的照片吗? 这是一个没有照片的朋友graph.facebook.com/37005951/picture?type=large 可能所有非照片都只有这张图片https://fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v2/yL/r/HsTZSDw4avx.gif。你可以检查图片的url是不是这个。 这种方法的问题是我仍然需要发出2x 请求。 刚刚尝试使用这种方法,虽然它不是一个选项。与 500 位好友核对数据需要 10 秒。 【参考方案1】:

虽然 Gajus 的建议查询可能现在可以工作,但一旦 Facebook 更改其 CDN 上默认图片的 URL,它就会中断。 (可能会发生,也可能不会发生。)

所以我建议改进一下:

profile_pic 表有一个名为is_silhouette 的字段,它是一个布尔值,表示用户是否有自己的头像集。

因此,要仅获取您的朋友中设置了个人资料图片的人,您可以使用

SELECT uid, name FROM user WHERE uid IN
  (SELECT id FROM profile_pic WHERE
    id IN (SELECT uid1 FROM friend WHERE uid2 = me() )
    AND NOT is_silhouette
  )

–> Try this query in the Graph API Explorer.

【讨论】:

【参考方案2】:

这可以通过一个简单的 FQL 来实现。

SELECT uid, name, pic_small FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND pic_small != 'https://fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v1/yP/r/FdhqUFlRalU.jpg'

seb-query 将获取您所有的朋友uids。如果pic_small 指的是Facebook 使用的placeholder,则另一个查询将匹配uid 与配置文件数据检查。

您可以快速测试它here。

【讨论】:

以上是关于如何只获取上传了头像的朋友,而忽略那些默认剪影的用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得所有 FB 朋友,而不仅仅是那些使用我的应用程序的朋友?

ASP中如果上传的头像为空,如何自动替换成任意一个图片,但不可以重复

如何从 html 图像中获取 base64 编码数据

获取上传图片的像素大小

django头像上传预览功能

qq头像设置默认怎么设置