¿Ha cambiado Facebook sharer.php para que ya no acepte parámetros detallados?

103

Hemos estado abriendo una ventana emergente para compartir (a través de window.open) con la URL como

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

y hasta algún punto desconocido en el último mes más o menos todo estaba bien.

Lo que está sucediendo ahora es; aparece el cuadro de diálogo emergente e incluye correctamente el título, la descripción, la imagen y la URL proporcionados por los parámetros de la cadena de consulta, pero cuando se envía la publicación, a la publicación del muro resultante en Facebook le falta el título, la descripción y la imagen, aunque todavía se vincula al URL correcta.

¿Alguien sabe si ha habido cambios recientes que podrían haber impedido repentinamente que esto funcione?

Aprovechando algunas respuestas comunes:

  • "sharer.php URL fue obsoleta" - el uso parecía continuar y parecía que el consenso era que se consideraba en gran medida que se quedaba - No he visto ninguna indicación específica de que debería haber dejado de funcionar repentinamente - podría haberse perdido algo

  • "Usar JavaScript SDK / estas metaetiquetas OG", no es posible en mi situación específica, solo confía en mí ... Puedo explicarte si REALMENTE quieres, pero en realidad no es relevante.

  • "Usar el cuadro de diálogo del feed": no es adecuado debido a la falta de soporte para publicar con archivos adjuntos en las páginas de FB

tdous
fuente
Hay un error de Facebook registrado por otra persona aquí developers.facebook.com/bugs/563991033677853, por lo que sugeriría que cualquier otra persona con el problema ayude a marcar esto con FB yendo allí y confirmando que usted también tiene este problema.
tdous
ACTUALIZAR para cualquier persona que experimente el mismo problema ... Otras personas que informaron esto como un error a Facebook no estaban tan entusiasmadas con proporcionar detalles por adelantado o responder a la información, así que volví a enviar un nuevo informe de error y se asignó a un desarrollador. Esperando noticias de FB. developers.facebook.com/x/bugs/357750474364812
tdous
4
Lamentablemente, la respuesta aceptada es correcta. Después de 3 meses de esperar a que se "arreglara" el error, cambiaron el comportamiento aceptado de sharer.php, por lo que estos parámetros ya no se pueden usar.
tdous

Respuestas:

105

Facebook ya no admite parámetros personalizados en sharer.php

El participante ya no aceptará parámetros personalizados y Facebook extraerá la información que se muestra en la vista previa de la misma manera que aparecería en Facebook como una publicación de las metaetiquetas url OG.

Utilice dialog / feeds en lugar de 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

Respuesta oficial del equipo de fb

jsnjack
fuente
1
Gáname
32
pero necesita una identificación de aplicación en este caso. ¿Y si es solo un sitio web?
German Capuano
3
De Facebook: el cuadro de diálogo Feed para web ha quedado obsoleto en la versión 2.0 de API. En la web, se anima a los desarrolladores a utilizar el cuadro de diálogo Compartir más moderno, que puede realizar las mismas funciones que estos cuadros de diálogo anteriores, pero además puede publicar historias personalizadas de Open Graph sin necesidad de iniciar sesión en Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Si es posible, sugeriría usar el SDK de Facebook con JavaScript. Es mucho más fácil de codificar y lo consideraría mucho menos exigente que usar el formulario de enlace anterior. Eche un vistazo a: developers.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer El objetivo de usar este tipo de URL es que no tenga que usar el SDK . Agrega un impacto de rendimiento innecesario a su página, ayuda a FB a invadir la privacidad de las personas y no es más simple que una simple <a>etiqueta o open()llamada.
Walf
98

A partir del 18 de julio de 2017, Facebook decidió ignorar los parámetros personalizados establecidos por los usuarios. Esta elección bloquea muchas de las posibilidades que ofrece esta respuesta y también rompe los botones utilizados en varios sitios web.

Los parámetros quotey hashtagfuncionan a partir de diciembre de 2018.


¿Alguien sabe si ha habido cambios recientes que podrían haber impedido repentinamente que esto funcione?

Los parámetros han cambiado. La respuesta aceptada actualmente dice:

Facebook ya no admite parámetros personalizados en sharer.php

Pero esto no es del todo correcto. Bueno, tal vez no los apoyen o respalden , pero los parámetros personalizados se pueden usar si conoce los nombres correctos. Éstos incluyen:

  • URL (por supuesto) → u
  • imagen personalizada → picture
  • título personalizado → title
  • presupuesto personalizado → quote
  • descripción personalizada → description
  • título (también conocido como nombre del sitio web) → caption

Por ejemplo, puede compartir esta misma pregunta con la siguiente 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.

¡Intentalo!

Creé una herramienta que facilita compartir URL en Facebook con parámetros personalizados. Puede usarlo para generar su sharer.phpenlace, simplemente presione el botón y copie la URL de la pestaña que se abre.

Andrea Lazzarotto
fuente
2
¡Muchas gracias, eso es genial!
Nightmare_82
1
@ TakácsZsolt No necesita JS en la página, solo puede generar la URL del lado del servidor en su CMS o código personalizado y luego entregar al usuario una URL simple. El botón de compartir oficial es malo porque incluye toneladas de KB de código JS y rastrea a los usuarios. Además, si está compartiendo sus propias URL, será mejor que proporcione etiquetas OpenGraph adecuadas en lugar de depender de los parámetros del compartidor de Facebook. :)
Andrea Lazzarotto
1
@Garavani, sí, tienes razón. Como se discutió en los comentarios de la herramienta, han desaprobado los parámetros y los han eliminado.
Andrea Lazzarotto
4
A partir de abril de 2018, parece que cualquier parámetro que no sea use ignora silenciosamente.
leo
1
Aparte udel único parámetro que veo reflejado esquote
robskrob
3

Tu problema se debe a la falta de marcadores OpenGraph, como dices no es posible que lo implementes por alguna razón.

Para usted, la única solución es utilizar la API de Facebook de PHP .

  1. Primero debes crear la aplicación en tu cuenta de facebook.
  2. Al crear la aplicación, tendrá dos datos clave para su código:

    YOUR_APP_ID 
    YOUR_APP_SECRET
    
  3. Descargue el SDK PHP de Facebook desde aquí .

  4. Puede comenzar con este código para compartir contenido de su sitio:

    <?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>
    

Puede encontrar más ejemplos en el sitio de desarrolladores de Facebook:

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

Joseph Collins
fuente
3
Tienes razón, Joseph, y espero que la información que has proporcionado sea útil para alguien que encuentre esta página. Por eso lo voté a favor. Solo que no lo he marcado como la respuesta porque ya sabíamos que tendríamos que recurrir a PHP si Facebook no revertía los cambios que había realizado. La solución completa que espero, una forma de usar la URL que comparte es una forma similar a cómo solía funcionar, puede que no exista ahora o en el futuro. Pero gracias por tu respuesta y confío en que sea de utilidad para alguien en esta situación.
tdous
2

Reviso tu URL en uso:

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

y vea estas diferencias:

  1. La URL del participante no es la misma.
  2. Las cadenas están en un orden diferente. (No sé si esto afecta).

Yo uso esta cadena de 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

En la sección "título" y "resumen", uso la función php de urlencode();esta manera:

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

Y funcionando bien para mí.

Joseph Collins
fuente
¿Sigue funcionando de tu lado? Cuando pruebo su URL de ejemplo, ¡no veo el título ni el resumen!
vcarel
1
@vcarel Esto solo funciona con OpenGraph, ese es el problema. Publica un método diferente en otra respuesta.
Joseph Collins
@JosephCollins En respuesta a sus diferencias: 1. La URL "hxxp: //facebook.com/sharer.php" simplemente redirige a "hxxp: //facebook.com/sharer/sharer.php", asumo que es compatible con versiones anteriores con una función para compartir previamente. 2. El orden de los campos no importa. Probé tu pedido por si acaso, sigue siendo un problema. Como dije en mi pregunta original, esto funcionó correctamente, luego un día no lo hizo sin cambios al final. Facebook lo ha aceptado como un error, por lo que no es solo un problema de formato de URL. Pero ciertamente se están tomando su tiempo para hacer algo al respecto.
tdous
-1

Si codifica & en su URL en% 26, funciona correctamente. Solo probado y verificado.

Kyle Graham
fuente
Cubierto por otras respuestas y tampoco lo suficientemente completo como para agregar valor.
utechtzs