查询所有公开的facebook帖子

时间:2013-12-15 12:45:11

标签: facebook facebook-graph-api facebook-fql

我需要构建一个包含三个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流中具有这三个链接的用户。但事实并非如此。我错了吗?

2 个答案:

答案 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月中旬禁用公开发布信息后,它已不再可能。