如何定制Facebook的sharer.php分享器

73

4
Facebook最近禁止自定义其共享功能,从现在开始您必须仅依赖于Open Graph标签。 - A F
5个回答

79
你所说的是Facebook在分享链接时提取的预览图片和文本。Facebook使用Open Graph Protocol获取这些数据。
基本上,你只需要在想要分享的URL上放置这些og:meta标签即可。
<meta property="og:title" content="The Rock"/>
<meta property="og:type" content="movie"/>
<meta property="og:url" content="http://www.imdb.com/title/tt0117500/"/>
<meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/>
<meta property="og:site_name" content="IMDb"/>
<meta property="fb:admins" content="USER_ID"/>
<meta property="og:description"
      content="A group of U.S. Marines, under command of
               a renegade general, take over Alcatraz and
               threaten San Francisco Bay with biological
               weapons."/>

正如您所看到的,这里有一个图片属性和一个描述。当您对页面的og:meta标签进行更改时,您可以使用Facebook Debugger来测试这些更改。它会告诉您是否有任何错误(以及如何修复它们!)


8
我认为这不是答案...因为这些标签是硬编码到HTML中的,这迫使整个页面上的任何/所有FB按钮遵守这些值...也许我在一个页面上有3个FB分享按钮,并且我希望每个按钮都有自定义的图片/描述。...当然,您可以使用js在共享操作之前更改元标记的值,但那似乎并没有实际效果,并且动态更改元标记似乎是一种不好的做法(因为那不是它们的目的)。...我会使用Lee Sibbald的sharer.php解决方案。 - dsdsdsdsd
1
然而,话虽如此,我确实在每个页面上使用这些元标记,以防用户只是将我的页面URL复制/粘贴到他们的Facebook帖子中,那么这些元标记就可以起作用...但对于单独的Facebook按钮(“分享这幅画”或“分享这个笑话”)则不适用。 - dsdsdsdsd
3
关于动态OG标签生成-我曾多次使用PHP实现此功能,根据查询字符串参数动态填充OG标签。只要参数在某种程度上对每个按钮都是唯一的(例如,在每个按钮URL的末尾添加“?id=123”并将“123”更改为唯一值),它就可以正常工作。与Facebook的人进行了讨论,他们没有将此视为不良做法,因此我认为这种方法是完全可行的。请注意,无法使用JS进行此操作,因为FB爬虫没有JS引擎。 - Snouto
2
@dsdsdsdsd - 即使您正在共享巨大的内容页面,每个内容片段都需要自己的永久链接,对吧?那就是您放置自定义OG标签的地方。 - Trass Vasston
所有的讨论都已经结束了,那么你如何解决Facebook缓存我们网站的问题呢?我已经搜索了两天以上。链接生成正确,但缩略图和文本不是来自帖子,而是来自我网站以前帖子的缓存数据。有人可以对此发表评论吗?谢谢。 - user6817600
显示剩余3条评论

58

更新:

此答案已过时。

如@jack-marchetti在他的评论中所述,以及@devantoine提供的链接: https:// developers.facebook.com / x / bugs / 357750474364812 /

Facebook已更改sharer.php的工作方式,正如Ibrahim Faour回复Facebook提交的错误报告所述。

sharer将不再接受自定义参数,facebook将从url OG meta标记中提取与在facebook上作为帖子显示的信息相同的信息预览。


请尝试此操作(通过此示例中的Javascript):

'http://www.facebook.com/sharer.php?s=100&p[title]='+encodeURIComponent('this is a title') + '&p[summary]=' + encodeURIComponent('description here') + '&p[url]=' + encodeURIComponent('http://www.nufc.com') + '&p[images][0]=' + encodeURIComponent('http://www.somedomain.com/image.jpg')

我尝试了一下没有图像部分,sharer.php窗口会自动预填,看起来像是一个解决方案。

我通过这篇SO文章发现了这个:

Want custom title / image / description in facebook share link from a flash app

以及来自Lelis718答案的此链接:

http:// www.daddydesign.com / wordpress / how-to-create-a-custom-facebook-share-button-for-your-iframe-tab /

因此,所有信用都归于Lelis718的答案。

[编辑于2013年5月3日] - 看起来我原来在这里的网址如果不包括“ s = 100”,也无法正常工作-不知道为什么,但已相应地进行了更新


1
嘿@lee-sibbald,看起来Facebook改变了它的设置,我再也不能在那个对话框中显示图片了。有趣... - Julian H. Lam
1
@JulianH.Lam,你有注意到我几天前添加的编辑吗?我正在使用上面显示的链接,包括“s=100”,看起来运行良好。 - Snouto
嗨@LeeSibbald,我确实尝试过了,但它仍然无法正常工作。最终我使用了更新的“Feed Dialog”窗口重新制作了对话框,虽然也不完美。还是谢谢你! - Julian H. Lam
4
似乎 p[x] 参数不再起作用了,至少在页面上有工作的 OpenGraph 标签的情况下。 - Mike Shultz
2
分享者不再接受自定义参数:https://developers.facebook.com/x/bugs/357750474364812/ - DevAntoine
显示剩余3条评论

22

看起来以下答案已经失效,Facebook不再接受Feed Dialog链接上的参数

您可以通过URL使用Feed Dialog来模拟Sharer.php的行为,但它会更加复杂。 您需要使用所计划共享的URL的基本URL设置Facebook应用程序。 然后,您可以执行以下操作:

1)创建如下链接:

   http://www.facebook.com/dialog/feed?app_id=[FACEBOOK_APP_ID]' +
        '&link=[FULLY_QUALIFIED_LINK_TO_SHARE_CONTENT]' +
        '&picture=[LINK_TO_IMAGE]' +
        '&name=' + encodeURIComponent('[CONTENT_TITLE]') +
        '&caption=' + encodeURIComponent('[CONTENT_CAPTION]) +
        '&description=' + encodeURIComponent('[CONTENT_DESCRIPTION]') +
        '&redirect_uri=' + FBVars.baseURL + '[URL_TO_REDIRECT_TO_AFTER_SHARE]' +
        '&display=popup';

(将 [CONTENT] 替换为适当的内容。文档在此处:https://developers.facebook.com/docs/reference/dialogs/feed

2)点击分享链接时,使用JavaScript在弹出窗口中打开该链接。

3)我喜欢创建一个文件(例如popupclose.html),以便在用户完成分享后将其重定向回来,该文件将包含<script>window.close();</script>以关闭弹出窗口。

除了设置之外,使用Feed对话框的唯一缺点是,如果您还管理页面,则无法选择通过页面共享,只有常规用户帐户才能共享。它可能会给您一些非常神秘的错误消息,其中大多数与您的Facebook应用程序的设置或分享的内容或URL存在问题有关。


2
太棒了!在尝试了极其不可靠且容易出现连接错误的JSDK版本之后,这个版本更加可靠和稳定。非常感谢! - Rid Iculous
1
对话框反馈支持自定义参数的截止日期为今天(2017年7月17日)。 - mehulmpt
@LocalPCGuy,参数不起作用,虽然链接有效,但图片描述和标题不起作用,请指导我。 - Sanaullah
/u/Sanaullah,这个不再起作用了,Facebook已经删除了这个功能。请查看答案顶部的粗体注释。 - LocalPCGuy

15

Sharer.php不再允许您进行自定义。您分享的页面将被刮取OG标签数据并共享。

要正确自定义,请使用带有JS-SDK的FB.UI


或者通过分享对话框,它可以像sharer.php一样只是一个链接(尽管这些链接将链接到Facebook应用程序,这可能不是首选)。 - fregante

5

Facebook的sharer.php参数用于分享帖子。

<a href="javascript: void(0);"
   data-layout="button"
   onclick="window.open('https://www.facebook.com/sharer.php?u=MyPageUrl&summary=MySummary&title=MyTitle&description=MyDescription&picture=MyYmageUrl', 'ventanacompartir', 'toolbar=0, status=0, width=650, height=450');"> Share </a>

不要使用空格,而要使用&nbsp


只有 u 参数有效... - Xel Naga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接