php - 提高 Facebook FQL 的性能和可用性

标签 php facebook performance facebook-graph-api fql.multiquery

我尝试从我在 Facebook 上担任管理员的页面获得一些见解。
我的代码所做的是,它通过 mySQL 获取我想要使用的页面的 ID。不过我没有包括那部分。

在此之后,我得到了每个 facebook ID 的 page_id、name 和 fan_count,并保存在 fancounts[] 中。

我有两个问题。

  1. 它的性能很慢
  2. 我找不到像这样回应数据的方法:

我的问题是,如何修改代码以提高性能并如上所示显示数据?我阅读了有关 fql.multiquery 的信息。这里可以用吗?

请提供代码示例。谢谢

最佳答案

目前,您正在对 Facebook 的数据库进行两次单独的调用,这会减慢一切。 Facebook 提供他们的多查询,这样你就可以在尽可能少的数据库调用中完成所有事情。所以你应该考虑使用的调用是:

"query1":"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)"

因为它们允许您引用先前的查询,所以您可以将其包含在 #: 之后

"query2":"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"

您需要使用的 PHP 是这样的:

$query = array(
    "pages"=>"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)",
    "messages"=>"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"
);

$fql_url = $facebook->api(array(
    'method' => 'fql.multiquery',
    'queries' => $query
));

print_r($fql_url);

如果第二个查询没有通过,请尝试使用仅此查询 测试 FB 数据库,看看它是否有效。如果查询本身不返回任何内容,则问题可能出在权限上(即访问敏感表——但我认为情况并非如此)。我经常遇到的另一个问题是 FQL 如何让自己陷入空白,因此请尝试从数组中省略所有可能的空白:

$query = array("pages"=>"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)","messages"=>"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2");

哇,这是可读的... 这取自 Facebook's documentation但是,在 FQL 上,因此如果使用第三方库,您可能需要针对您的 Web 应用程序调整它。您的所有数据都保存在 $fql_url 中。您需要做的就是遍历它并回显您想要的信息。如果您想查看其中包含的所有内容的摘要,请考虑使用 print_r()var_dump()只是为了了解您的方位。

编辑

您收到第二个查询的空数组的原因是因为您似乎没有stream 表的权限。如果你查看 Facebook 的 documentation , 他们提到访问此表所需的条件:

To read the stream table you need

  • read_stream permissions for all posts that the current session user is able to view
  • read_insights permissions to see post impressions for any posts made by a Page owned by the current session user

要检查您拥有哪些权限,您可以运行此查询:

$check_query = $facebook->api(array(
    "method"    => "fql.query",
    "query"     => "SELECT * FROM permissions WHERE uid=me()"
));

foreach($check_query[0] as $k => $v) {
    if($v === "1") {
        echo "<strong>$k</strong> permission is granted.<br>";
    } else {
        echo "<strong>$k</strong> permission is not granted.<br>";
    }
}

关于php - 提高 Facebook FQL 的性能和可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899024/

相关文章:

ios - 如何通过 react native 发布 ios 应用程序

java - 使用 Java 删除我的 Facebook 帐户上的帖子

python - 实参校验性能影响

css - withStyles 的 Material UI 潜在性能缓慢

performance - 指数移动平均线

PHP:警告:sort() 期望参数 1 为数组,已给定资源

php - API 调用应该是 GET 还是 POST?

php - 在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败

php - 我基于 php 的客户端 IP 跟踪器并不总是触发,为什么?

Facebook 模态框的 JQuery 实现