【问题标题】:Is there a way to programmatically check if a user shared a link on Facebook?有没有办法以编程方式检查用户是否在 Facebook 上分享了链接?
【发布时间】:2011-07-18 19:45:45
【问题描述】:

我目前正在使用 jQuery 记录对我网站上 Facebook 共享链接的每次点击,但我正在寻找更准确的解决方案。我不想记录点击次数,而是记录实际的“分享”。有没有办法在用户分享链接后从 Facebook 获得回复消息?

【问题讨论】:

  • 我怀疑没有 facebook 应用程序是不可能的,即便如此,这还是有点隐私问题。
  • 您所说的“股份”是什么意思? like 插件还是 old 分享插件?
  • 我不认为旧的共享者有可能

标签: php jquery facebook


【解决方案1】:

我今天遇到了这个:http://graph.facebook.com/http://stackoverflow.com

它返回指定 URL 的总共享计数。我的应用程序中的每个用户都有唯一的 URL,因此我可以使用它轻松跟踪他们的共享。

它也适用于推特:http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com

【讨论】:

  • 是的,这很好用,唯一的缺点是如果有人从他们的 FB 墙上删除共享,它不会更新。刚刚尝试了一个随机链接:graph.facebook.com/http://stackoverflow.com/id1122,删除共享后,它仍然在 FB 上显示为共享:1。
  • 太棒了。我将根据 IP 和时间戳为每个访问我的页面的用户生成一个唯一的哈希值......然后 ping 那个 Graph URL 以确保他们发布它。
  • graph.facebook.com/http://ebay.com/'); $jsonIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if($key == "shares"){ echo $nos = $val; //nos = 共享数量 } } ?>
  • 只需将上面的注释从头到尾复制,粘贴到一个php文件中,用IDE打开即可。它会起作用并且看起来也不错。
  • 我尝试使用 RestTemplate 在 Java 应用程序中获得响应,它给了我 400 Bad Request,我更改为 graph.facebook.com/?id=https://example.com
【解决方案2】:

只要它保持活动状态,您就可以使用 Facebook“Feed”对话框而不是“Share”对话框来始终获得分享确认。 (这适用于 Javascript Facebook SDK。)

以下是我对两者区别的理解:


Share Method

FB.ui({
    method: 'share',
    href: 'http://stackoverflow.com/questions/5363517',
}, function(response){
   console.log(response)
});

如果用户已登录并授权您的应用:

  • 如果帖子被分享,您将在 response 变量中获得帖子 ID:{post_id: "10205041067000110_10205045578512895"}
  • 如果帖子未分享,response 将为空。

如果用户没有登录到您的应用程序(他们仍然需要登录到 Facebook):

  • 无论用户是否共享,response 变量都将为空。

因此,如果您绝对需要共享确认,则必须先要求用户登录。这对您的应用来说可能不是问题,但在我的情况下,这给共享过程增加了不必要的摩擦。


Feed Method

(已弃用但仍然有效)

FB.ui({
  method: 'feed',
  link: 'http://stackoverflow.com/questions/5363517',
  caption: 'Test Caption',
}, function(response){
    console.log(response)
});

不考虑登录状态(w.r.t. 您的应用;他们仍然需要登录 Facebook):

  • 如果帖子实际被分享,则 Facebook 返回的 response 变量将具有帖子 ID:{post_id: "10205041067000110_10205045578512895"}
  • 如果帖子未分享,response 将为空。

使用此方法,无论用户的登录状态如何,您都可以随时判断是否有人发帖。

【讨论】:

  • 目前,如果您没有使用 publish_actions 权限范围(需要审核)登录的用户,他们会停止发回 post_id。
【解决方案3】:

您可以使用 ShareThis 之类的东西来代替您的 jquery 函数,甚至可以获得更多见解、分析等。 但是,您会遇到同样的问题,由场外分享/喜欢创建,如在此处发布:http://forums.sharethis.com/topic.php?id=2947

【讨论】:

    【解决方案4】:

    这就是我要做的......使用调用此 javascript 函数的普通锚创建共享(间距或括号或其他内容可能已关闭):

    FB.ui(
            {
    
                display:'iframe',
                method: 'stream.publish',
                caption: 'Put something here',
                description: 'put something here',
                name: 'foo',
                link: 'http://www.foo.com',
                picture: 'http://fo.com/img.gif'
    
            },
            function (response) {
                if (response && response.post_id) {
                //this means the post was completed....response.post_id is the FB post ID
    
                $.ajax({
                    var URL = '/pages/ajax_InsertUserFacebookPost.aspx?';
                    URL += 'facebookpostid=' + response.post_id;
                        type: "GET",
                        url: URL,
                        data: "{}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        async: true
                    });
    
    
                } else {
                    //alert('Post was not published.');
                }
            }
            );
    

    【讨论】:

      【解决方案5】:

      截至 2016 年 4 月,Twitter 拥有 deprecated v1 的 api,并且不提供用于确定链接共享的先前方法的替代方法。您将 need to use 他们的 Search api 仅维持过去 7 天的共享计数,现在您需要订阅他们的流式处理 api 以维持您自己的长期运行计数。

      或者,您可以使用http://newsharecounts.comhttp://opensharecount.com/ 之类的免费服务,这样他们就可以代表您订阅 API 并保持计数。但是,预计共享计数可能需要一分钟(或更长时间)才能更新。

      来自 newsharecounts 常见问题 -

      “无论您的网站有多大,或者您的内容有多旧,我们平均会在 1 分钟内检测到新分享”

      来自 opensharecount.com 主页 -

      “搜索结果可能需要一些时间才能进入,因此最初报告的所有链接计数为零。如果一小时后仍然为零,请联系我们。”

      Re: FB 分享 (http://graph.facebook.com/(url)),请注意,用户可以使用分享对话框并选择“只有我”选项,它仍然以与他们与朋友分享相同的方式计算.知道分享者也可以在不久之后删除帖子,但以后对 api 的调用不会反映这一点。

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 2012-04-19
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多