查询所有公开的facebook帖子

Xar*_*das 7 facebook facebook-fql facebook-graph-api

我需要构建一个包含三个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 />";
    }
    }}
Run Code Online (Sandbox Code Playgroud)

这打印出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
Run Code Online (Sandbox Code Playgroud)

据我了解,这应该返回在其fb流中具有这三个链接的用户.但事实并非如此.我错了吗?

Rah*_*ora 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
Run Code Online (Sandbox Code Playgroud)

同样,要搜索包含所有三个链接的帖子,您可以进一步扩展 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 
Run Code Online (Sandbox Code Playgroud)