一次API调用中的附加信息

时间:2014-11-10 06:18:10

标签: facebook facebook-graph-api facebook-fql facebook-php-sdk fql.multiquery

在下面我的代码为我的Facebook页面输出帖子,喜欢,评论和分享的数量。它只考虑一周的数据。这是使用fql qpproach完成的(我知道fql已被弃用但我的代码工作正常,因为我使用的应用程序是一个较旧的应用程序)。我有几个问题需要帮助才能完成任务:

  1. 我需要帮助使用最新的api方法转换此代码,以便它可以在新创建的应用程序上运行。
  2. 代码输出喜欢,评论和分享的总数很好,但是有可能获得过去一周内喜欢,评论和分享我的页面帖子的用户名,并更新数据库表中的值?如果是,怎么样?
  3. 如果第2点可以,可以在一次API调用中完成吗?
  4. 在这里感谢一些帮助。

    <?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.它没有列出共享帖子的用户名。

1 个答案:

答案 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)的上述代码将返回以下内容。如果您看到空白页面或错误,那么您显然做错了:

enter image description here

测试的最佳方法是进行API调用,然后添加print_r( $result )以查看Facebook是否返回任何数据。如果它是空的,那么您的API调用有问题。

相关问题