在下面我的代码为我的Facebook页面输出帖子,喜欢,评论和分享的数量。它只考虑一周的数据。这是使用fql qpproach完成的(我知道fql已被弃用但我的代码工作正常,因为我使用的应用程序是一个较旧的应用程序)。我有几个问题需要帮助才能完成任务:
在这里感谢一些帮助。
<?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评论。不知道它来自哪里。
2.像计数不正确。它只显示和列出最多25个喜欢和评论。我试图将限制设置为999999,但它显示最大值为1000.是否有任何解决方案?这两个帖子的实际数字是24483
3.评论计数不正确。它必须是90但代码列表25 + 5 = 30
4.它没有列出共享帖子的用户名。
答案 0 :(得分:1)
不使用FQL,您可以执行以下操作:
$d2 = strtotime( '- 7 days' );
$result = $facebook->api( $page_id . '/posts?fields=likes,comments,shares&until=' . $d2 );
foreach ( $result['data'] as $post ) {
echo 'Post: ' . $post['id'] . ' Likes: ' . count( $post['likes']['data'] ) . ' Comments: ' . count( $post['comments']['data'] ) . ' Shares: ' . $post['shares']['count'] . '<br/>';
}
上述API结果还包括对每个帖子都喜欢/评论的所有用户的名称和ID。您可以在代码中执行另一个foreach
循环,以循环浏览喜欢/评论并相应地更新您的数据库。
示例:
// main loop to cycle through posts
foreach ( $result['data'] as $post ) {
// inner loop to cycle through likes
foreach ( $post['likes'] as $like ) {
echo 'User: ' . $like['id'] . ' Name: ' . $like['name'];
// code to check / update db here
}
}
使用limit=2
运行第177526890164页(Narendra Modi)的上述代码将返回以下内容。如果您看到空白页面或错误,那么您显然做错了:
测试的最佳方法是进行API调用,然后添加print_r( $result )
以查看Facebook是否返回任何数据。如果它是空的,那么您的API调用有问题。