【问题标题】:Querying all public facebook posts查询所有公开的 Facebook 帖子
【发布时间】:2013-12-15 12:45:11
【问题描述】:

我需要构建一个应用程序,该应用程序将为三个 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 流中具有这三个链接的用户。然而,事实并非如此。我是不是搞错了?

【问题讨论】:

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


    【解决方案1】:

    一种更简单的方法是只检查帖子的消息部分中是否存在 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 
    

    【讨论】:

    • 感谢您的回答。您是否使用 Graph API Explorer 工具测试了此查询?它应该适用于我自己墙上的帖子,我已将他们的隐私设置为公开。无论我输入什么链接组合,我都无法得到任何结果。我认为我们遗漏了一些东西......
    • 你是对的。行为很奇怪!我使用图形资源管理器测试了第一个查询,它工作正常。但是,它没有显示多个 URL 的任何结果。
    • 我什至尝试了SELECT message FROM stream WHERE CONTAINS("http://vimeo.com") AND strpos(message,'http://vimeo.com') &gt;=0 AND CONTAINS("http://www.youtube.com") AND strpos(message,'http://www.youtube.com') &gt;=0,它返回了一些结果。
    【解决方案2】:

    自 2013 年 12 月中旬 Facebook 禁用公共帖子搜索以来,它不再可能。

    【讨论】:

    • 正如维基百科所说,需要引用。 Facebook 官方文档上的帖子链接真的有助于“推销你的观点”:)
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多