Facebook 一个API调用中的附加信息

Facebook 一个API调用中的附加信息,facebook,facebook-graph-api,facebook-fql,facebook-php-sdk,fql.multiquery,Facebook,Facebook Graph Api,Facebook Fql,Facebook Php Sdk,Fql.multiquery,下面给出了我的代码为我的Facebook页面输出帖子、喜欢、评论和共享的数量。它只考虑当前一周的数据。这是使用fql qpproach完成的(我知道fql已被弃用,但我的代码运行良好,因为我使用的应用程序是较旧的应用程序)。我有几个问题要问,需要帮助才能完成: 我需要帮助转换此代码使用最新的api方法,以便它可以在新创建的应用程序上工作 代码可以输出喜欢、评论和共享的总数,但是否可以获取过去一周喜欢、评论和共享我页面帖子的人的用户名,并更新数据库表中的值?如果是,如何进行 如果第2点是可能的,那

下面给出了我的代码为我的Facebook页面输出帖子、喜欢、评论和共享的数量。它只考虑当前一周的数据。这是使用fql qpproach完成的(我知道fql已被弃用,但我的代码运行良好,因为我使用的应用程序是较旧的应用程序)。我有几个问题要问,需要帮助才能完成:

  • 我需要帮助转换此代码使用最新的api方法,以便它可以在新创建的应用程序上工作
  • 代码可以输出喜欢、评论和共享的总数,但是否可以获取过去一周喜欢、评论和共享我页面帖子的人的用户名,并更新数据库表中的值?如果是,如何进行
  • 如果第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;
    
    ?>
    
    PageID 88978302070在过去30天内(10月31日和10月21日)有2篇帖子

    我所做的改动很少:
    1.我将
    'until'
    改为
    'since'
    88978302070/posts?字段=喜欢、评论、共享&自=-30天。

    2.我更改了内部循环,因为我发现的另一个问题是。。。而不是
    $post['likes']
    $post['comments']
    ,它应该是
    $post['likes']['data']
    $post['comments']['data']

    代码正在运行,但现在问题是:
    1.它列出了三篇文章,而页面只有两篇。另外一个帖子显示为0个喜欢,0个分享,0个评论。不知道它是从哪里来的。
    2.像计数是不正确的。它最多只显示和列出25条喜欢和评论。我试图设置999999的限制,但它显示的最大值为1000。有什么解决办法吗?这两个职位的实际相似人数为24483
    3.注释计数不正确。它必须是90,但代码列出25+5=30

    4.它不会列出共享帖子的用户的用户名。

    如果不使用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/>';
    }
    
    使用
    limit=2运行177526890164页(Narendra Modi)的上述代码将返回以下结果。如果您看到空白页或错误,那么您显然做错了:


    最好的测试方法是进行API调用,然后在调用后添加
    print\r($result)
    ,查看Facebook是否返回任何数据。如果为空,则表明您的API调用有问题。

    谢谢Shah先生。。。当我在没有循环的情况下运行第一个代码来循环post_id时,它不起作用,然后我在图形浏览器中发现“共享”字段不存在。。。相反,它的sharedposts仍然不起作用。是因为应用程序太旧了吗?我需要为此制作一个新的应用程序吗?我是否可以请您调查这个问题,以及您是否可以使用实时post id为“0123456789”的实际代码解码您的示例谢谢
    共享
    不会总是出现在数据中(如果没有共享),因此您应该始终先检查它是否存在(例如isset($post['shares'))。你也应该对喜欢和评论做同样的处理。举个例子。它有27个喜欢,2个评论和3个共享。同样对于上面的代码,我使用了纳伦德拉·莫迪的页面(页面id=177526890164),因为它是一个有很多喜欢、共享和评论的页面,但它仍然不起作用……(使用Facebook图形浏览器()我正确地看到了共享。如果您看到
    sharedposts
    ,请相应地修改您的代码。我不知道我做错了什么,但它没有任何回应。它给出了一个空白页。现在我正在查看cadburydairymilkindia页(id=104105339655077)和过去30天的帖子。当我查看页面时,我看到有两篇帖子,总共有201+225=426条喜欢,25+7=32条评论和17+6=23条共享。但是当我尝试使用上述代码获取此计数时,它只是没有任何回显。你能在最后检查一下并尝试通过代码获取计数吗?我请求你在他回答我好让我看看。谢谢
    $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/>';
    }
    
    // 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
      }
    }