Facebook sharer.php是否已更改为不再接受详细参数?


103

我们一直在打开一个共享弹出窗口(通过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 

直到上个月某个未知的点,一切都很好。

现在正在发生的是;会出现弹出对话框,并正确包含查询字符串参数提供的标题,描述,图像和URL,但是,在提交帖子时,Facebook上生成的墙上帖子缺少标题,描述和图像,尽管它仍链接到正确的网址。

有人知道最近是否有更改可能突然使它停止工作?

抢先一些常见的答复:

  • “ sharer.php URL已被弃用”-使用似乎仍在继续,并且似乎已达成共识,即它在很大程度上被认为一直存在-我还没有看到任何具体迹象表明它应该突然停止工作-可能错过了一些东西

  • “使用JavaScript SDK /这些OG元标记”-在我的特定情况下是不可能的-请相信我...我可以解释一下您是否真的想要,但这确实无关紧要。

  • “使用提要对话框”-不适合,因为不支持在FB页面上发布带有附件的文件


有一个其他人在这里记录的Facebook错误developer.facebook.com/bugs/563991033677853,所以我建议有此问题的其他人去那里并确认您也有这个问题,从而帮助FB进行举报。
tdous 2014年

遇到相同问题的人的更新...向Facebook报告这是一个bug的其他人并没有那么热衷于预先提供详细信息或响应信息,所以我重新提交了一个新的bug报告,并将其分配给开发人员。只是在等待听到FB的消息。developers.facebook.com/x/bugs/357750474364812
2014年

4
可悲的是,公认的答案是正确的。在等待3个月的错误被“修复”之后,他们更改了sharer.php的可接受行为,因此不再可以使用这些参数。
2014年

Answers:


105

Facebook不再支持中的自定义参数 sharer.php

共享者将不再接受自定义参数,facebook将以与url OG meta标签中的帖子相同的方式提取在预览中显示的信息。

使用对话框/提要而不是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团队的官方答复


1
打败我回答自己的问题;)
tdous 2014年

32
但在这种情况下,您需要一个应用ID。如果这只是一个网站怎么办?
德国卡帕诺2014年

3
来自Facebook:API版本2.0中已弃用Web的Feed对话框。在网络上,鼓励开发人员使用更现代的“共享对话框”,该对话框可以执行与这些较旧对话框相同的所有功能,但还可以发布自定义“开放图谱”故事,而无需Facebook登录。 developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails

如果可能的话,我建议使用带JavaScript的Facebook SDK。编写代码要容易得多,而且我认为比使用上面的链接表单要少得多。看看:developers.facebook.com/docs/sharing/web
LiquidDrummer

12
@LiquidDrummer使用这些类型的URL的全部目的是,因此您不必使用SDK。它增加了不必要的性能影响到你的页面,帮助FB侵犯人们的隐私,是不是比一个普通简单的<a>标签或open()通话。
Walf

98

从2017年7月18日开始,Facebook已决定不理会用户设置的自定义参数。此选择阻止了此答案提供的许多可能性,并且还破坏了多个网站上使用的按钮。

quotehashtag参数上班2018年12月的。


有人知道最近是否有更改可能突然使它停止工作?

参数已更改。当前接受的答案指出:

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&quote=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.

试试吧!

我建立了一个工具,可以更轻松地使用自定义参数在Facebook上共享URL。您可以使用它来生成sharer.php链接,只需按一下按钮,然后从打开的选项卡中复制URL。


2
非常感谢,太好了!
Nightmare_82

1
@TakácsZsolt您无需在页面上使用JS,只需在CMS或自定义代码中在服务器端生成URL,然后为用户提供简单的URL。官方的共享按钮不好,因为它包含大量的JS代码KB 并跟踪用户。另外,如果您共享自己的URL,则最好提供适当的OpenGraph标记,而不要依赖Facebook共享器参数。:)
Andrea Lazzarotto

1
@Garavani,是的,你是对的。如工具评论中所讨论的,它们已弃用了参数并删除了它们。
Andrea Lazzarotto'7

4
截至2018年4月,似乎除u静默之外都忽略了任何其他参数。
leo

1
除了u我看到的唯一参数以外,其他都是quote
robskrob

3

您的问题是由于缺少OpenGraph标记引起的,因为您说由于某种原因不可能实现。

对于您来说,唯一的解决方案是使用PHP Facebook API

  1. 首先,您必须在您的facebook帐户中创建该应用程序。
  2. 创建应用程序时,您将拥有两个代码的关键数据:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. 此处下载Facebook PHP SDK 。

  4. 您可以从以下代码开始,以共享网站中的内容:

    <?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网站上找到更多示例:

https://developers.facebook.com/docs/reference/php


3
您是对的约瑟夫,我希望您提供的信息对找到此页面的人有用。因此,我投票赞成。我只是没有将其标记为答案,因为我们已经知道,如果Facebook不还原他们所做的更改,我们将不得不使用PHP。我希望使用共享程序URL的完整解决方案与以前的工作方式类似,现在或将来可能不存在。但是,感谢您的回复,我相信这对这种情况的人会很有用。
tdous 2014年

2

我查看了您使用的网址:

https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE

并看到以下差异:

  1. 共享者URL不同。
  2. 字符串的顺序不同。(不知道这是否会影响)。

我使用以下URL字符串:

http://www.facebook.com/sharer.php?s=100&p[url]=http://www.example.com/&p[images][0]=/images/image.jpg&p[title]=Title&p[summary]=Summary

在“标题”和“摘要”部分,我使用如下所示的php函数urlencode();

<?php echo urlencode($detail->title); ?>

而且对我来说还不错。


它还在您身边吗?当我尝试您的示例URL时,没有显示标题和摘要!
vcarel 2014年

1
@vcarel这仅适用于OpenGraph,这就是问题所在。在另一个答案中发布其他方法。
约瑟夫·柯林斯

@JosephCollins针对您的差异:1. URL“ hxxp://facebook.com/sharer.php”仅重定向到“ hxxp://facebook.com/sharer/sharer.php”,我认为是向后兼容的具有以前的共享功能。2.字段顺序没有区别。我确实尝试过您的订单,以防万一,仍然是一个问题。就像我在最初的问题中所说的那样,它确实可以正常工作,但是有一天,它没有任何变化。Facebook已将其视为错误,因此不只是URL格式问题。但是他们当然会花些时间做任何事情。
tdous

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.