【问题标题】:How can I get the share count of a photo on Facebook?如何获取 Facebook 照片的分享次数?
【发布时间】:2012-03-12 09:40:12
【问题描述】:

通过使用 Graph API,我可以检索 cmets,包括内部和外部 Facebook url 的点赞数。但我只能获取外部 Facebook url 的分享数

例如:

https://graph.facebook.com/?ids=http://www.youtube.com/watch?v=tu8BNocnVzc

但不是 Facebook 的:

http://graph.facebook.com/?ids=http://www.facebook.com/photo.php?fbid=364861533533284

如何获取 Facebook 对象的分享数?

(我可以通过这个网址http://graph.facebook.com/364861533533284获得点赞和cmets)

【问题讨论】:

    标签: facebook facebook-graph-api


    【解决方案1】:

    您应该使用 FQL 并查询照片表 https://developers.facebook.com/docs/reference/fql/photo 或 link_stat 表 https://developers.facebook.com/docs/reference/fql/link_stat..

    您可以在此处查看它如何提供结果:http://developers.facebook.com/tools/explorer?fql=SELECT%20url%2C%20normalized_url%2C%20share_count%2C%20like_count%2C%20comment_count%2C%20total_count%2C%0Acommentsbox_count%2C%20comments_fbid%2C%20click_count%20FROM%20link_stat%20WHERE%20url%3D%22http%3A%2F%2Fwww.facebook.com%2Fphoto.php%3Ffbid%3D364861533533284%22

    以下是使用 FQL 调用获取结果的方法:

        <?php 
            $img_url='http://www.facebook.com/photo.php?fbid=364861533533284';
    
            $query_url="https://api.facebook.com/method/fql.query?query=
                        select%20total_count,share_count,like_count,comment_count,
                        commentsbox_count%20from%20link_stat%20where%20
                        url='" . $directory_url . "'&format=json";
    
            $response = file_get_contents($query_url);
            $response_array = json_decode($response, true);
            $params=$response_array[0];
    
    
            $total_count=$params['total_count'];
            $like_count=$params['like_count'];
            $comment_count=$params['comment_count'];
            $share_count=$params['share_count'];
    
            ?>
    

    【讨论】:

    • 你能写查询以获得结果吗?
    • ok 用查询更新了我的答案,并在开发人员工具中进行了测试,希望对您有所帮助!
    • 此答案中描述的方法不起作用。我可以通过 Graph API 或 FQL“照片”表找到 like_count 和 comment_count,但似乎无法找到照片的共享计数。这是一个结果不正确的示例查询:developers.facebook.com/tools/…
    【解决方案2】:

    前面的答案有一点是正确的——你应该使用 FQL。它速度较慢,但​​有效。至于其余部分 - 它根本不起作用,因为 API 不会返回照片链接的 share_count,因为它是 Facebook 的内部文件,并且链接本身中有 PHP 参数或其他未知原因。

    API 不会返回此类信息是不好的,因为它在大多数情况下是公开的,因此他们应该实现它,但是这不起作用。

    不过,这种方法的工作原理是检索与该照片相关的帖子链接并计算其分享次数。

    这是使用的代码:`

           $photo_link = $photo['link'];
           //First Query - Find the ID of the Post for the Photo
           $query_post_id = "SELECT post_id, permalink FROM stream WHERE source_id = '[PAGE_OR_USER_ID]' AND permalink = '$photo_link'";
           $fb_post_info = $facebook->api(array('method' => 'fql.query', 'query' => $query_post_id));
           $id = $fb_post_info['0']['post_id'];
           $whole_id = $fb_post_info['0']['post_id'];
           $fb_post_id = explode('_', $id);
    
           $fb_post_id = $fb_post_id['1'];
    
    
           //Second Query - Find the Share Count Using the Post Link (not the Photo link)
           $query_share_count = "SELECT share_count FROM link_stat WHERE url='http://www.facebook.com/[PAGE_OR_PERSONAL_USERNAME]/posts/$fb_post_id'";
    
           $post_info = $facebook->api(array('method' => 'fql.query', 'query' => $query_share_count));
           $share_count = $post_info['0']['share_count'];
           echo $share_count;
            ?></span>`
    

    第一个查询返回一个帖子 ID 和永久链接的数组。帖子 ID 如下所示:PAGEID_POSTID,例如 3333333333_453536456464,因此我们必须将其拆分以仅获取第二部分,即在永久链接中找到的帖子 ID。

    之后,我们为帖子构建链接,通常如下所示:facebook.com/USERNAME/posts/POSTID,然后检索该链接的共享计数。这里也可以使用 Graph API 来获取 share_count。

    这是获取我迄今为止找到的信息的唯一方法 - 这有点草率,因为 FQL 速度较慢,而且有时股票的更新在一定时间内不会出现,但正如我所说- 它有点工作。

    【讨论】:

    • 请注意,第二部分不需要使用 FQL;你可以简单地使用graph.facebook.com/PAGEID_POSTID
    【解决方案3】:

    如果照片有相关的帖子和​​ post_id - 那么您可以从 stream 表中获取分享数,否则您将只有链接、cmets 数。

    post_id 也作为 page_story_id 保存在 photo 表中,

    否则您可以尝试伪造它(连接所有者和对象 ID),但现在总是如此,

    或者您可以尝试通过来源 + 永久链接、附件.media.link 或 created_time 查找相关帖子(由于棘手的 FB 行为,在这种情况下使用限制)

    但我认为如果 page_story_idphoto 表中没有任何相关帖子时为空。

    示例(php):

    $query = array(
        'photoInfo' => "SELECT object_id, aid, album_object_id, comment_info.comment_count, like_info.like_count, page_story_id, concat(owner, '_', object_id), owner, pid, images  FROM photo where object_id='{$fbActivity['object_id']}'",
        'postInfo'  => "SELECT post_id, share_count, like_info.like_count, comment_info.comment_count, message FROM stream WHERE
                            post_id IN (SELECT page_story_id FROM #photoInfo)
                            OR post_id IN (SELECT anon FROM #photoInfo)
                        ' //OR (source_id IN (SELECT owner FROM #photoInfo) AND permalink = '{$fbActivity['link']}') LIMIT 999
    );
    $t = $publicFb->api('/fql', 'GET', array('q' => $query));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多