Facebook sharer.php a-t-il changé pour ne plus accepter les paramètres détaillés?

103

Nous avons ouvert une fenêtre contextuelle de partage (via window.open) avec l'URL comme

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

et jusqu'à un moment inconnu au cours du dernier mois, tout allait bien.

Ce qui se passe maintenant est; la boîte de dialogue contextuelle apparaît et inclut correctement le titre, la description, l'image et l'URL fournis par les paramètres de la chaîne de requête, mais lorsque le message est soumis, le message mural résultant sur Facebook ne contient pas le titre, la description et l'image, bien qu'il soit toujours lié au URL correcte.

Est-ce que quelqu'un sait s'il y a eu des changements récents qui auraient pu soudainement empêcher cela de fonctionner?

Prévention de certaines réponses courantes:

  • "L'URL sharer.php était obsolète" - l'utilisation semblait continuer et il semblait que le consensus était qu'elle était largement considérée comme persistante - je n'ai vu aucune indication précise qu'elle aurait dû soudainement cesser de fonctionner - aurait pu manquer quelque chose

  • "Utiliser le SDK JavaScript / ces balises méta OG" - pas possible dans ma situation spécifique - faites-moi simplement confiance ... Je peux vous expliquer si vous voulez VRAIMENT mais ce n'est vraiment pas pertinent.

  • "Utiliser la boîte de dialogue de flux" - ne convient pas en raison du manque de support pour la publication avec des pièces jointes sur les pages FB

tdous
la source
Il y a un bogue Facebook enregistré par quelqu'un d'autre ici developer.facebook.com/bugs/563991033677853 donc je suggérerais que toute autre personne ayant le problème aide à le signaler avec FB en y allant et en confirmant que vous avez également ce problème.
tdous le
MISE À JOUR pour toute personne rencontrant le même problème ... D'autres personnes qui ont signalé cela comme un bogue à Facebook n'étaient pas si enthousiastes à fournir des détails à l'avance ou à répondre aux informations, j'ai donc resoumis un nouveau rapport de bogue et il a été attribué à un développeur. J'attends juste des nouvelles de FB. developer.facebook.com/x/bugs/357750474364812
tdous
4
Malheureusement, la réponse acceptée est juste. Après 3 mois d'attente pour que le bogue soit "corrigé", ils ont changé le comportement accepté de sharer.php afin que ces paramètres ne puissent plus être utilisés.
tdous

Réponses:

105

Facebook ne prend plus en charge les paramètres personnalisés dans sharer.php

Le partageur n'acceptera plus les paramètres personnalisés et Facebook tirera les informations qui sont affichées dans l'aperçu de la même manière qu'elles apparaîtront sur Facebook en tant que publication à partir des balises méta de l'URL OG.

Utilisez dialog / feeds au lieu 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

Réponse officielle de l'équipe FB

jsnjack
la source
1
Battez-moi pour répondre à ma propre question;)
tdous
32
mais vous avez besoin d'un identifiant d'application dans ce cas. Et si ce n'était qu'un site Web?
German Capuano
3
Depuis Facebook: la boîte de dialogue Feed pour le Web est obsolète dans la version 2.0 de l'API. Sur le Web, les développeurs sont encouragés à utiliser la boîte de dialogue de partage plus moderne, qui peut exécuter toutes les mêmes fonctions que ces boîtes de dialogue plus anciennes, mais peuvent en outre publier des histoires Open Graph personnalisées sans nécessiter de connexion Facebook. developer.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Si possible, je suggérerais d'utiliser le SDK Facebook avec JavaScript. C'est beaucoup plus facile à coder et je le considérerais comme beaucoup moins pointilleux que d'utiliser le formulaire de lien ci-dessus. Jetez un œil à: developer.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer l'intérêt de l'utilisation de ces types d'URL est que vous n'ayez pas à utiliser le SDK . Il ajoute une performance inutile à votre page, aide FB à envahir la vie privée des gens et n'est pas plus simple qu'une <a>balise ou un open()appel.
Walf
98

À partir du 18 juillet 2017, Facebook a décidé de ne pas tenir compte des paramètres personnalisés définis par les utilisateurs. Ce choix bloque de nombreuses possibilités offertes par cette réponse et casse également les boutons utilisés sur plusieurs sites Web.

Les paramètres quoteet hashtagfonctionnent à partir de décembre 2018.


Est-ce que quelqu'un sait s'il y a eu des changements récents qui auraient pu soudainement empêcher cela de fonctionner?

Les paramètres ont changé. La réponse actuellement acceptée déclare:

Facebook ne prend plus en charge les paramètres personnalisés dans sharer.php

Mais ce n'est pas tout à fait correct. Eh bien, peut-être qu'ils ne les prennent pas en charge ou ne les approuvent pas, mais des paramètres personnalisés peuvent être utilisés si vous connaissez les noms corrects. Ceux-ci inclus:

  • URL (bien sûr) → u
  • image personnalisée → picture
  • titre personnalisé → title
  • devis personnalisé → quote
  • description personnalisée → description
  • légende (aka nom du site Web) → caption

Par exemple, vous pouvez partager cette question avec l'URL suivante:

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.

Essayez-le!

J'ai créé un outil qui facilite le partage d'URL sur Facebook avec des paramètres personnalisés. Vous pouvez l'utiliser pour générer votre sharer.phplien, appuyez simplement sur le bouton et copiez l'URL depuis l'onglet qui s'ouvre.

Andrea Lazzarotto
la source
2
Merci beaucoup, c'est super!
Nightmare_82
1
@ TakácsZsolt Vous n'avez pas besoin de JS sur la page, vous pouvez simplement générer l'URL côté serveur dans votre CMS ou code personnalisé et ensuite servir à l'utilisateur une URL simple. Le bouton de partage officiel est mauvais car il comprend des tonnes de Ko de code JS et il suit les utilisateurs. De plus, si vous partagez vos propres URL, vous feriez mieux de servir des balises OpenGraph appropriées au lieu de vous fier aux paramètres de partage de Facebook. :)
Andrea Lazzarotto
1
@Garavani, oui vous avez raison. Comme indiqué dans les commentaires de l'outil, ils ont désapprouvé les paramètres et les ont supprimés.
Andrea Lazzarotto
4
En avril 2018, il semble que tous les paramètres autres que ceux usoient ignorés en silence.
leo
1
Autre que ule seul paramètre que je vois reflété estquote
robskrob
3

Votre problème est causé par le manque de marqueurs OpenGraph, car vous dites qu'il n'est pas possible que vous implémentiez pour une raison quelconque.

Pour vous, la seule solution est d'utiliser l' API PHP Facebook .

  1. Vous devez d'abord créer l'application dans votre compte facebook.
  2. Lors de la création de l'application, vous aurez deux données clés pour votre code:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Téléchargez le SDK PHP Facebook à partir d' ici .

  4. Vous pouvez commencer avec ce code pour partager du contenu depuis votre site:

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

Vous pouvez trouver plus d'exemples sur le site Facebook Developers:

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

Joseph Collins
la source
3
Vous avez raison Joseph, et j'espère que les informations que vous avez fournies seront utiles à quelqu'un qui trouvera cette page. À cause de cela, je l'ai voté. Je ne l'ai seulement pas marqué comme réponse car nous savions déjà que nous devrons revenir à PHP si Facebook ne revenait pas sur les modifications apportées. La solution complète que j'espère, une façon d'utiliser l'URL de partage est une manière similaire à la façon dont elle fonctionnait, peut ne pas exister maintenant ou à l'avenir. Mais merci pour votre réponse et j'espère qu'elle sera utile à quelqu'un dans cette situation.
tdous
2

Je vérifie votre URL en cours d'utilisation:

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

et voyez ces différences:

  1. L'URL de partage n'est pas la même.
  2. Les chaînes sont dans un ordre différent. (Je ne sais pas si cela affecte).

J'utilise cette chaîne d'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

Dans la section "titre" et "résumé", j'utilise la fonction php urlencode();comme ceci:

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

Et ça marche bien pour moi.

Joseph Collins
la source
Cela fonctionne-t-il toujours de votre côté? Lorsque j'essaye votre exemple d'URL, le titre et le résumé ne s'affichent pas!
vcarel
1
@vcarel Cela ne fonctionne qu'avec OpenGraph, c'est le problème. Publiez une méthode différente dans une autre réponse.
Joseph Collins
@JosephCollins En réponse à vos différences: 1. L'URL "hxxp: //facebook.com/sharer.php" redirige simplement vers "hxxp: //facebook.com/sharer/sharer.php", je suppose qu'elle est rétrocompatible avec une fonction de partage précédente. 2. L'ordre des champs ne fait aucune différence. J'ai essayé votre commande au cas où, toujours un problème. Comme je l'ai dit dans ma question initiale, cela a fonctionné correctement, puis un jour cela n'a pas fonctionné sans aucun changement de notre côté. Cela a été accepté comme un bogue par Facebook, donc ce n'est pas seulement un problème de format d'URL. Mais ils prennent certainement leur temps à faire quoi que ce soit.
tdous
-1

Si vous encodez le & dans votre URL en% 26, cela fonctionne correctement. Juste testé et vérifié.

Kyle Graham
la source
Couvert par d'autres réponses et pas assez complet pour ajouter de la valeur.
utechtzs