有没有办法以编程方式检查用户是否在Facebook上共享链接?

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

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

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

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

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

以下是我对两者之间差异的理解:


分享方法

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

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

  • 如果post已共享,您将在response变量中获得postID: {post_id: "10205041067000110_10205045578512895"}
  • 如果post未共享,则response将为空。

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

  • 无论用户是共享还是不共享, response变量都将为null。

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


饲料方法

(已弃用但仍处于活动状态)

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

更新登录状态(与您的应用程序相关;他们仍然需要登录Facebook):

  • 如果post实际上是共享的,则Facebook返回的response变量将具有postID: {post_id: "10205041067000110_10205045578512895"}
  • 如果post未共享,则response将为空。

使用此方法,您始终可以判断是否有人发布,无论他们的登录状态如何。

你可以使用像ShareThis这样的东西而不是你的jquery函数,甚至可以获得更多的见解,分析等。但是,你会遇到同样的问题,从非现场分享/喜欢创建,比如发布在这里: http:// forums。 sharethis.com/topic.php?id=2947

这就是我做的….使用调用此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://sofzh.miximages.com/php/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.'); } } ); 

截至2016年4月,Twitter已弃用其api的v1,并且未提供先前方法的替代方案来确定链接的份额。 您需要使用他们的Search api,它只维护过去7天的共享计数,现在您需要订阅他们的流API以维持您自己的长期运行计数。

或者,您可以使用http://newsharecounts.com或http://opensharecount.com/等免费服务,以便他们代表您订阅api并维持计数。 但是,预计共享计数可能需要一分钟(或更长时间)才能更新。

来自newsharecounts常见问题 –

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

来自opensharecount.com主页 –

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

Re:FB sharing( http://graph.facebook.com/ ( url) ),请注意,用户可以使用共享对话框并选择“仅限我”选项,但仍然可以按照与如果他们与朋友分享 知道分享者之后不久也可以删除post,但未来对api的调用不会反映出来。