我尝试从我在 Facebook 上担任管理员的页面获得一些见解。
我的代码所做的是,它通过 mySQL 获取我想要使用的页面的 ID。不过我没有包括那部分。
在此之后,我得到了每个 facebook ID 的 page_id、name 和 fan_count,并保存在 fancounts[]
中。
我有两个问题。
- 它的性能很慢
- 我找不到像这样回应数据的方法:
我的问题是,如何修改代码以提高性能并如上所示显示数据?我阅读了有关 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 viewread_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/