【发布时间】:2015-01-06 09:45:50
【问题描述】:
在下面给出我的代码为我的 Facebook 页面输出帖子、喜欢、评论和分享的数量。它只考虑当前的一周数据。这是使用 fql qpproach 完成的(我知道 fql 已被弃用但我的代码工作正常,因为我使用的应用程序是较旧的应用程序)。我有几个问题要问,需要帮助才能完成:
- 我需要帮助才能使用最新的 api 方法转换此代码,以便它可以在新创建的应用上运行。
- 代码输出点赞总数、cmets 和分享数就好了,但是是否可以获取在过去一周内点赞、评论和分享我的页面帖子的人的用户名并更新数据库表中的值?如果是,怎么做?
- 如果第 2 点可行,是否可以在一个 API 调用中完成?
在这里感谢一些帮助。
<?php
require('config.php');
session_start();
?>
<?php
$facebook = new Facebook(array(
'appId' => '012myappid210',
'secret' => 'abc012myappsecret210cba',
'cookie' => true,
));
$token=$_SESSION['token'];
$pageid='88978302070'; //(my facebook page id)
$d=strtotime("now");
$d2=strtotime('now - 7 days');
$fqlAPIParams = array(
'method' => 'fql.query',
'query' =>'
SELECT post_id,comments,message,likes,created_time,share_count
FROM stream
WHERE actor_id = '.$pageid.' AND
source_id = '.$pageid.' AND created_time <= '.$d.' AND created_time >= '.$d2.'
LIMIT 250' ,
'access_token'=>$token
);
$result = $facebook->api($fqlAPIParams);
$postCount = 0;
$likescount=0;
$commentscount=0;
$sharescount=0;
foreach($result as $post)
{
$shares=$post['share_count'];
$likes=$post['likes']['count'];
$comments=$post['comments']['count'];
$likescount+=$likes;
$commentscount+=$comments;
$sharescount+=$shares;
$postCount++;
}
echo "Post " . $postCount . " Likes " . $likescount . " Comments " . $commentscount . " Shares " . $sharescount;
?>
这是您建议的代码的输出:
Post: Likes: 25 Comments: 5 Shares: 30
Post: Likes: 0 Comments: 0 Shares:
Post: Likes: 25 Comments: 25 Shares: 54
PageID 88978302070 在过去 30 天内(10 月 31 日和 10 月 21 日)有 2 个帖子
我所做的几乎没有改变:
1.我把'until'改成'since'88978302070/posts?fields=likes,comments,shares&since=-30 days.
2. 我更改了内部循环,因为我发现的另一个问题是......而不是$post['likes'] 和$post['comments'],它应该是$post['likes']['data'] 和$post['comments']['data']
代码正在运行,但现在问题是:
1. 它列出了三个帖子,而页面只有 2 个。另外一个帖子显示了 0 个赞、0 个分享、0 个 cmets。不知道它来自哪里。
2、点赞数不正确。它只显示和列出最多 25 个喜欢和 cmets。我试图设置 999999 的限制,但它显示最大 1000。有什么解决方案吗?这两个帖子的实际点赞数为 24483
3.评论数不正确。它必须是 90,但代码列出 25+5=30
4. 它没有列出分享帖子的人的用户名。
【问题讨论】:
标签: facebook facebook-graph-api facebook-fql facebook-php-sdk fql.multiquery