有没有Facebook sharer.php改为不再接受详细参数?

时间:2014-01-06 17:59:17

标签: javascript php facebook api sharing

我们一直在使用像

这样的网址打开共享弹出窗口(通过window.open)
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网址” - 使用情况似乎仍在继续 似乎共识是它在很大程度上被认为是 坚持 - 我没有看到任何具体的迹象 应该突然停止工作 - 可能错过了什么

  • “使用JavaScript SDK /这些OG元标记” - 在我的具体情况下是不可能的 情况 - 只要相信我......如果你真的想要,我可以解释一下 这真的不相关。

  • “使用Feed对话框” - 由于缺乏支持而不合适 在FB页面上发布附件

5 个答案:

答案 0 :(得分:100)

Facebook不再支持sharer.php

中的自定义参数
  

分享者将不再接受自定义参数和facebook   拉出预览中显示的信息相同   它将作为来自网址OG元的帖子出现在Facebook上   标签

Use dialog/feeds instead of 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

Official answer from fb team

答案 1 :(得分:90)

从2017年7月18日开始,Facebook决定忽略用户设置的自定义参数。这个选择阻止了这个答案提供的许多可能性,它还打破了几个网站上使用的按钮。

quotehashtag参数自2018年12月起生效。

  

是否有人知道最近是否有突然停止工作的变化?

参数已更改。目前接受的答案是:

  

Facebook不再支持sharer.php

中的自定义参数

不完全正确。好吧,也许他们不支持支持支持,但自定义参数可以是如果您知道正确的名称,请使用。其中包括:

  • 网址(当然)→u
  • 自定义图片→picture
  • 自定义标题→title
  • 自定义报价→quote
  • 自定义说明→description
  • 标题(又名网站名称)→caption

例如,您可以使用以下网址分享此问题:

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.

Try it!

我使用自定义参数构建a tool,这样可以更轻松地在Facebook上分享网址。您可以使用它来生成sharer.php链接,只需按下按钮并从打开的标签中复制网址。

答案 2 :(得分:3)

你的问题是由缺少标记OpenGraph引起的,正如你所说,由于某些原因你不可能实现它。

对您而言,唯一的解决方案是使用 PHP Facebook API

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

    YOUR_APP_ID 
    YOUR_APP_SECRET
    
  3. here下载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>
    
  5. 您可以在Facebook Developers网站上找到更多示例:

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

答案 3 :(得分:1)

我查看了您正在使用的网址:

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

并看到这种差异:

  1. 共享者网址不相同。
  2. 字符串的顺序不同。 (不知道这是否会影响)。
  3. 我使用此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); ?>
    

    对我来说工作正常。

答案 4 :(得分:-1)

如果您将URL中的&编码为%26,则它可以正常工作。刚刚经过测试和验证。