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 отсутствуют заголовок, описание и изображение, хотя он по-прежнему ссылается на правильный URL.

Кто-нибудь знает, были ли недавние изменения, которые могли внезапно остановить его работу?

Упреждаю некоторые общие ответы:

  • «URL sharer.php устарел» - использование, похоже, продолжалось, и казалось, что консенсус заключался в том, что он в значительной степени считался неизменным - я не видел никаких конкретных указаний на то, что он должен был внезапно перестать работать - возможно, что-то упустил

  • «Использовать JavaScript SDK / эти метатеги OG» - невозможно в моей конкретной ситуации - просто поверьте мне ... Я могу объяснить, если вы ДЕЙСТВИТЕЛЬНО хотите, но это действительно не актуально.

  • «Использовать диалог ленты» - не подходит из-за отсутствия поддержки публикации с вложениями на страницах FB

tdous
источник
Есть ошибка Facebook, зарегистрированная кем-то еще здесь developers.facebook.com/bugs/563991033677853, поэтому я бы посоветовал кому-нибудь еще, у кого есть проблема, помочь отметить это с помощью FB, перейдя туда и подтвердив, что у вас тоже есть эта проблема.
tdous 06
ОБНОВЛЕНИЕ для всех, кто сталкивается с той же проблемой ... Другие люди, которые сообщили об этом как об ошибке в Facebook, не были настолько горячими в предоставлении подробностей заранее или ответе на информацию, поэтому я повторно отправил новый отчет об ошибке, и он был передан разработчику. Просто жду новостей от FB. developers.facebook.com/x/bugs/357750474364812
tdous
4
К сожалению, принятый ответ верен. После 3 месяцев ожидания «исправления» ошибки они изменили приемлемое поведение sharer.php, поэтому эти параметры больше нельзя использовать.
05

Ответы:

105

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

jsnjack
источник
1
Обыграй меня, чтобы ответить на мой вопрос;)
сегодня
32
но в этом случае вам понадобится идентификатор приложения. Что, если это просто веб-сайт?
German Capuano
3
От Facebook: Диалог веб-каналов устарел в API версии 2.0. В сети разработчикам рекомендуется использовать более современный диалог общего доступа, который может выполнять все те же функции, что и эти старые диалоги, но может дополнительно публиковать пользовательские истории Open Graph без необходимости входа в Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Если возможно, я бы предложил использовать Facebook SDK с JavaScript. Кодировать намного проще, и я считаю его менее требовательным, чем использование формы ссылки выше. Взгляните на: developers.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer весь смысл использования этих типов URL-адресов заключается в том, что вам не нужно использовать SDK . Он добавляет ненужной производительности вашей странице, помогает FB вторгаться в частную жизнь людей и не проще простого <a>тега или open()вызова.
WALF
98

С 18 июля 2017 года Facebook решил не учитывать настраиваемые параметры, задаваемые пользователями. Этот выбор блокирует многие возможности, предлагаемые этим ответом, а также ломает кнопки, используемые на нескольких веб-сайтах.

Параметры quoteи hashtagработают по состоянию на декабрь 2018 г.


Кто-нибудь знает, были ли недавние изменения, которые могли внезапно остановить его работу?

Параметры изменились. В принятом на данный момент ответе говорится:

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.

Попытайся!

Я создал инструмент, который упрощает обмен URL-адресами на Facebook с настраиваемыми параметрами. Вы можете использовать его для создания своей sharer.phpссылки, просто нажмите кнопку и скопируйте URL-адрес из открывшейся вкладки.

Андреа Лаццаротто
источник
2
Большое спасибо, это здорово!
Nightmare_82
1
@ TakácsZsolt Вам не нужен JS на странице, вы можете просто сгенерировать URL-адрес на стороне сервера в вашей CMS или в специальном коде, а затем предоставить пользователю простой URL-адрес. Официальная кнопка общего доступа плохая, потому что включает в себя тонны кода JS и отслеживает пользователей. Кроме того, если вы делитесь своими собственными URL-адресами, вам лучше использовать правильные теги OpenGraph, а не полагаться на параметры совместного доступа Facebook. :)
Андреа
1
@Garavani, да, ты прав. Как уже говорилось в комментариях к инструменту, они устарели и удалили параметры.
Андреа
4
По состоянию на апрель 2018 года, похоже, любые параметры, кроме uмолча, игнорируются.
leo
1
Кроме uединственного параметра, который я вижу, этоquote
robskrob
3

Ваша проблема вызвана отсутствием маркеров OpenGraph, поскольку вы говорите, что это невозможно реализовать по какой-то причине.

Для вас единственное решение - использовать PHP Facebook API .

  1. Сначала вы должны создать приложение в своей учетной записи facebook.
  2. При создании приложения у вас будет два ключевых данных для вашего кода:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Загрузите PHP SDK для Facebook отсюда .

  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

Джозеф Коллинз
источник
3
Ты прав, Джозеф, и я надеюсь, что предоставленная тобой информация будет полезна тем, кто найдет эту страницу. Из-за этого я проголосовал за это. Я только не пометил это как ответ, потому что мы уже знали, что нам придется вернуться к PHP, если Facebook не отменит сделанные изменения. Полное решение, на которое я надеюсь, способ использования URL-адреса общего доступа аналогичен тому, как он работал раньше, может не существовать сейчас или в будущем. Но спасибо за ваш ответ, и я надеюсь, что он будет кому-то полезен в этой ситуации.
сегодня
2

Я просматриваю ваш URL:

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
1
@vcarel Это работает только с OpenGraph, вот в чем проблема. Опубликуйте другой метод в другом ответе.
Джозеф Коллинз
@JosephCollins В ответ на ваши различия: 1. URL "hxxp: //facebook.com/sharer.php" просто перенаправляет на "hxxp: //facebook.com/sharer/sharer.php", я предполагаю, что он обратно совместим. с предыдущей функцией обмена. 2. Порядок полей не имеет значения. На всякий случай попробовала ваш заказ, проблема не исчезла. Как я сказал в своем первоначальном вопросе, это сработало правильно, но однажды это не сработало без каких-либо изменений с нашей стороны. Facebook считает это ошибкой, так что проблема не только в формате URL. Но они определенно не торопятся, делая что-нибудь с этим.
сегодня
-1

Если вы закодируете & в своем URL-адресе на% 26, он будет работать правильно. Просто протестировано и проверено.

Кайл Грэм
источник
Охвачено другими ответами, а также недостаточно тщательным, чтобы добавить ценность.
utechtzs