【问题标题】:Additional information in one API call一个 API 调用中的附加信息
【发布时间】:2015-01-06 09:45:50
【问题描述】:

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

  1. 我需要帮助才能使用最新的 api 方法转换此代码,以便它可以在新创建的应用上运行。
  2. 代码输出点赞总数、cmets 和分享数就好了,但是是否可以获取在过去一周内点赞、评论和分享我的页面帖子的人的用户名并更新数据库表中的值?如果是,怎么做?
  3. 如果第 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&amp;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


    【解决方案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 循环,以循环浏览likes / cmets 并相应地更新您的数据库。

    例子:

    // 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 调用有问题。

    【讨论】:

    • 谢谢Shah先生...当我在没有循环的情况下运行第一个代码以循环通过post_id时,它不起作用,然后我在图形资源管理器中发现'shares'字段没有存在...相反,它的共享帖子仍然无法正常工作。是不是因为App太旧了?我需要为此制作一个新应用程序吗?我可以请您调查一下这个问题,以及您是否可以使用带有实时帖子 ID '0123456789' 的实际代码来解码您的示例,谢谢
    • shares 不会总是出现在数据中(没有共享),因此您应该始终先检查它是否存在(例如 isset( $post['shares'] ). 你也应该对喜欢和 cmets 做同样的事情。
    • facebook.com/bajaobiscoot/posts/300472446799955 举个例子。它有 27 个赞,2 个 cmets 和 3 个分享。同样对于上面的代码,我使用了 Narendra Modi 的页面(页面 id = 177526890164),因为它是一个有很多喜欢、分享和 cmets 的页面之一,但它仍然不起作用.... :(
    • 使用 Facebook Graph Explorer (developers.facebook.com/tools/explorer/145634995501895/…) 我可以正确看到共享。如果您看到sharedposts,请相应地修改您的代码。
    • 我不知道我做错了什么,但它只是没有回应任何东西。它给出了一个空白页。现在我正在查看 cadburydairymilkindia 页面(id = 104105339655077)和过去 30 天的帖子。当我查看facebook.com/cadburydairymilkindia 页面时,我看到有两个帖子共有 201+225=426 个赞,25+7=32 cmets 和 17+6=23 个分享。但是当我尝试使用上面的代码来获取这个计数时,它只是没有回显任何东西。您能否在最后检查一下并尝试通过代码获取计数?我要求您更新答案中的代码,以便我查看。谢谢
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2010-09-16
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多