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

IT技术 javascript php facebook api sharing
2021-02-19 04:19:31

我们一直在打开一个共享弹出窗口(通过 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 上的结果墙帖子缺少标题、描述和图像,尽管它仍然链接到正确的网址。

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

先发制人的一些常见react:

  • “sharer.php URL 已被弃用” - 使用似乎仍在继续,而且似乎一致认为它在很大程度上被认为是坚持使用 - 我没有看到任何具体的迹象表明它应该突然停止工作 - 可能错过了一些东西

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

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

5个回答

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

共享者将不再接受自定义参数,并且 facebook 将提取在预览中显示的信息,就像它在 facebook 上显示为来自 url OG 元标记的帖子一样。

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

如果可能,我建议使用带有 JavaScript 的 Facebook SDK。编码要容易得多,我认为它比使用上面的链接表单要少得多。看一看:developers.facebook.com/docs/sharing/web
2021-04-17 04:19:31
来自 Facebook:用于 Web 的 Feed Dialog 在 API 版本 2.0 中已被弃用。在 Web 上,鼓励开发人员使用更现代的共享对话框,它可以执行与这些旧对话框相同的所有功能,但可以额外发布自定义 Open Graph 故事,而无需 Facebook 登录。 developer.facebook.com/docs/sharing/reference/share-dialog
2021-04-21 04:19:31
打败我回答我自己的问题;)
2021-05-07 04:19:31
但在这种情况下,您需要一个应用程序 ID。如果只是一个网站呢?
2021-05-08 04:19:31
@LiquidDrummer 使用这些类型的 URL 的全部意义在于您不必使用 SDK它为您的页面增加了不必要的性能损失,帮助 FB 侵犯人们的隐私,而且并不比普通的<a>标签或open()调用简单
2021-05-09 04:19:31

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

quotehashtag参数上班2018年12月的。


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

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

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

但这并不完全正确。好吧,也许他们不支持或不认可它们,但是如果您知道正确的名称,则可以使用自定义参数这些包括:

  • 网址(当然)→ 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。

截至 2018 年 4 月,似乎除了u被默默忽略之外的任何参数
2021-04-26 04:19:31
除了u我看到的唯一参数是quote
2021-04-28 04:19:31
@Garavani,是的,你是对的。正如该工具的评论所讨论的那样,他们已弃用这些参数并将其删除。
2021-05-01 04:19:31
@TakácsZsolt 您不需要页面上的 JS,您只需在 CMS 或自定义代码中生成 URL 服务器端,然后为用户提供一个简单的 URL。官方的分享按钮很糟糕,因为它包含大量 KB 的 JS 代码并且它会跟踪用户。此外,如果您要共享自己的 URL,则最好提供适当的 OpenGraph 标签,而不是依赖 Facebook 共享者参数。:)
2021-05-04 04:19:31
非常感谢,太好了!
2021-05-05 04:19:31

您的问题是由于缺少标记 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 开发者网站中找到更多示例:

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

你是对的约瑟夫,我希望你提供的信息对找到这个页面的人有用。正因为如此,我已经投了赞成票。我只是没有将其标记为答案,因为我们已经知道如果 Facebook 不恢复他们所做的更改,我们将不得不退回到 PHP。我希望的完整解决方案,一种使用共享者 URL 的方式与过去的工作方式类似,现在或将来可能不存在。但是感谢您的回复,我相信这对遇到这种情况的人会很有用。
2021-05-06 04:19:31

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

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 时,没有显示标题和摘要!
2021-04-27 04:19:31
@vcarel 这仅适用于 OpenGraph,这就是问题所在。在另一个答案中发布不同的方法。
2021-05-02 04:19:31
@JosephCollins 针对您的不同意见: 1. URL“hxxp://facebook.com/sharer.php”只是重定向到“hxxp://facebook.com/sharer/sharer.php”,我认为是向后兼容的具有以前的共享功能。2. 字段的顺序没有区别。我确实尝试了您的订单以防万一,仍然是一个问题。正如我在我最初的问题中所说的那样,这确实可以正常工作,但有一天它没有在我们结束时没有任何变化。它已被 Facebook 接受为错误,因此这不仅仅是 URL 格式问题。但他们肯定会花时间做任何事情。
2021-05-08 04:19:31

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

被其他答案覆盖,也不够彻底以增加value。
2021-05-10 04:19:31