有Facebook的sharer.php更改为不再接受详细的参数?
我们已经打开了一个共享popup窗口(通过window.open)的URL像
https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE
直到上个月的某个未知点,一切都很好。
现在发生的事情是; popup对话框出现,并正确包括由查询string参数提供的标题,描述,图像和URL,但是当提交post时,在Facebook上产生的贴子缺less标题,描述和图像,尽pipe它仍然链接到正确的url。
有谁知道是否有最近的变化,可能突然停止这个工作?
抢先一些常见的反应:
-
“sharer.phpurl被弃用” – 使用似乎继续下去,似乎共识是它基本上被认为是坚持 – 我还没有看到任何具体的迹象表明,它应该突然停止工作 – 可能已经错过了一些东西
-
“使用JavaScript SDK /这些OG元标签” – 在我的具体情况下是不可能的 – 只要相信我…我可以解释你是否真的想要,但实际上并不相关。
-
“使用提要对话框” – 由于缺乏FB页面附件的发布支持,因此不合适
Facebook不再支持sharer.php
自定义参数
共享器将不再接受自定义参数,Facebook将以预览方式显示的信息与从Facebook OG元标记中显示在Facebook上的方式相同。
使用dialog / feeds而不是sharer.php
https://www.facebook.com/dialog/feed? app_id=145634995501895 &display=popup&caption=An%20example%20caption &link=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fdialogs%2F &redirect_uri=https://developers.facebook.com/tools/explorer
fb团队的官方答复
从2017年7月18日起,Facebook决定不考虑用户设置的自定义参数。 这个select阻止了这个答案提供的许多可能性,它也打破了几个网站上使用的button。
quote
参数仍然有效。
有谁知道是否有最近的变化,可能突然停止这个工作?
参数已经改变。 目前接受的答案是:
Facebook不再支持
sharer.php
自定义参数
但这不完全正确。 那么,也许他们不支持或认可他们,但如果你知道正确的名字, 可以使用自定义参数 。 这些包括:
- URL(当然)→
u
- 自定义图像→
picture
- 自定义标题→
title
- 自定义报价→
quote
- 自定义描述→
description
- 标题(又名网站名称)→
caption
例如,您可以通过以下URL分享这个问题:
https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fstackoverflow.com%2Fq%2F20956229%2F1101509&picture=http%3A%2F%2Fwww.applezein.net%2Fwordpress%2Fwp-content%2Fuploads%2F2015%2F03%2Ffacebook-logo.jpg&title=A+nice+question+about+Facebook"e=Does+anyone+know+if+there+have+been+recent+changes+which+could+have+suddenly+stopped+this+from+working%3F&description=Apparently%2C+the+accepted+answer+is+not+correct.
尝试一下!
我已经构build了一个工具 ,可以更轻松地在Facebook上使用自定义参数分享url 。 您可以使用它来生成您的sharer.php
链接,只需按下button,并从打开的选项卡复制URL。
你的问题是由于缺乏OpenGraph标记而引起的,正如你所说的,由于某种原因你不可能实现。
对你而言,唯一的解决scheme是使用PHP Facebook API 。
- 首先,您必须在您的Facebook帐户中创build应用程序。
-
在创build应用程序时,您将拥有两个关键代码数据:
YOUR_APP_ID YOUR_APP_SECRET
-
从这里下载Facebook PHP SDK。
-
您可以从以下代码开始,从您的网站分享内容:
<?php // Remember to copy files from the SDK's src/ directory to a // directory in your application on the server, such as php-sdk/ require_once('php-sdk/facebook.php'); $config = array( 'appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', 'allowSignedRequest' => false // optional but should be set to false for non-canvas apps ); $facebook = new Facebook($config); $user_id = $facebook->getUser(); ?> <html> <head></head> <body> <?php if($user_id) { // We have a user ID, so probably a logged in user. // If not, we'll get an exception, which we handle below. try { $ret_obj = $facebook->api('/me/feed', 'POST', array( 'link' => 'www.example.com', 'message' => 'Posting with the PHP SDK!' )); echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>'; // Give the user a logout link echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>'; } catch(FacebookApiException $e) { // If the user is logged out, you can have a // user ID even though the access token is invalid. // In this case, we'll get an exception, so we'll // just ask the user to login again here. $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' )); echo 'Please <a href="' . $login_url . '">login.</a>'; error_log($e->getType()); error_log($e->getMessage()); } } else { // No user, so print a link for the user to login // To post to a user's wall, we need publish_stream permission // We'll use the current URL as the redirect_uri, so we don't // need to specify it here. $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) ); echo 'Please <a href="' . $login_url . '">login.</a>'; } ?> </body> </html>
你可以在Facebook Developers网站上find更多的例子:
我在使用中检查您的url:
https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE
并看到这种差异:
- 共享者URL不相同。
- string的顺序不同。 (不知道这是否影响)。
我使用这个URLstring:
http://www.facebook.com/sharer.php?s=100&p[url]=http://www.example.com/&p[images][0]=http://img.dovov.comimage.jpg&p[title]=Title&p[summary]=Summary
在“title”和“summary”部分,我使用了php函数urlencode();
喜欢这个:
<?php echo urlencode($detail->title); ?>
并为我工作得很好。