我需要构建一个包含三个URL的三个输入字段的应用程序。然后,应用程序需要搜索Facebook上的所有公开帖子,并查找发布该特定URL的用户。我正在使用此代码:
$q = "http://www.someurl.com";
$search = $facebook->api('/search?q=' . $q .'&type=post&limit=200');
foreach ($value as $fkey=>$fvalue) {
if(isset($fvalue['from']['name']))
{
echo $fvalue['from']['name']."<br />";
}
}}
这打印出200个发布一个特定链接的facebook用户名。但是,正如我上面提到的,我需要搜索多个URL匹配。通过使用这种方法,我需要进行三次查询调用,然后交叉引用结果,并获得出现在所有三个结果列表中的用户。有没有办法在一次调用中形成查询以返回所需的结果?我现在认为FQL是强大的工具,但我认为它不能用于这种公共查询。我真的只限于公共图形api吗?如果是这种情况,是否可以仅使用图形API来形成复杂的查询?
编辑#1: 我尝试使用以下FQL:
SELECT source_id FROM stream WHERE
CONTAINS('http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic')
AND CONTAINS('http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war')
AND CONTAINS('http://www.youtube.com/watch?v=1TBxdXm3DP0') limit 200
据我了解,这应该返回在其fb流中具有这三个链接的用户。但事实并非如此。我错了吗?
答案 0 :(得分:2)
更简单的方法是检查帖子的消息部分中是否存在URL。这个fql应该可以工作:
SELECT message FROM stream WHERE CONTAINS("http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic")
AND strpos(message,'http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic') >=0
同样,要搜索包含所有三个链接的帖子,您可以进一步扩展fql。
SELECT message FROM stream WHERE CONTAINS("http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic")
AND strpos(message,'http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic') >=0
AND CONTAINS("http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war")
AND strpos(message,'http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war') >=0
AND CONTAINS("http://www.youtube.com/watch?v=1TBxdXm3DP0")
AND strpos(message,'http://www.youtube.com/watch?v=1TBxdXm3DP0') >=0
答案 1 :(得分:1)
自从facebook于2013年12月中旬禁用公开发布信息后,它已不再可能。