如何只获取上传了头像的朋友,而忽略那些默认剪影的用户?
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 朋友,而不仅仅是那些使用我的应用程序的朋友?