Facebook sharer.php è cambiato per non accettare più parametri dettagliati?


103

Abbiamo aperto un popup di condivisione (tramite window.open) con l'URL come

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

e fino a qualche punto sconosciuto nell'ultimo mese o giù di lì tutto andava bene.

Quello che sta accadendo ora è; viene visualizzata la finestra di dialogo popup che include correttamente il titolo, la descrizione, l'immagine e l'URL forniti dai parametri della stringa di query, ma quando il post viene inviato, il post in bacheca risultante su Facebook non ha il titolo, la descrizione e l'immagine, sebbene rimanga ancora collegato al URL corretto.

Qualcuno sa se ci sono stati cambiamenti recenti che avrebbero potuto improvvisamente impedirne il funzionamento?

Prevenire alcune risposte comuni:

  • "L'URL sharer.php è stato deprecato" - l'utilizzo sembrava continuare e sembrava che il consenso fosse che era ampiamente considerato come rimanente - non ho visto alcuna indicazione specifica che avrebbe dovuto cessare improvvisamente di funzionare - potrebbe essersi perso qualcosa

  • "Usa JavaScript SDK / questi meta tag OG" - non possibile nella mia situazione specifica - fidati di me ... Posso spiegarti se VERAMENTE lo desideri, ma non è davvero rilevante.

  • "Usa la finestra di dialogo feed" - non adatto a causa della mancanza di supporto per la pubblicazione con allegati nelle pagine FB


C'è un bug di Facebook registrato da qualcun altro qui developers.facebook.com/bugs/563991033677853 quindi suggerirei a chiunque altro con il problema di aiutarlo a segnalarlo con FB andando lì e confermando che anche tu hai questo problema.
tutto il

AGGIORNAMENTO per chiunque abbia lo stesso problema ... Altre persone che hanno segnalato questo bug a Facebook non erano così entusiaste nel fornire dettagli in anticipo o nel rispondere alle informazioni, quindi ho inviato nuovamente una nuova segnalazione di bug ed è stata assegnata a uno sviluppatore. Sto solo aspettando di sentire notizie da FB. sviluppatori.facebook.com/x/bugs/357750474364812
tdous

4
Purtroppo, la risposta accettata è giusta. Dopo 3 mesi di attesa per la "correzione" del bug hanno cambiato il comportamento accettato di sharer.php in modo che questi parametri non possano più essere utilizzati.
fino

Risposte:


105

Facebook non supporta più i parametri personalizzati in sharer.php

Il condivisore non accetterà più parametri personalizzati e Facebook estrarrà le informazioni che vengono visualizzate nell'anteprima nello stesso modo in cui apparirebbero su Facebook come post dai meta tag dell'URL OG.

Usa dialog / feed invece di 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

Risposta ufficiale del team fb


1

32
ma in questo caso è necessario un ID app. E se fosse solo un sito web?
Tedesco Capuano

3
Da Facebook: la finestra di dialogo Feed per il web è stata deprecata nella versione API 2.0. Sul Web, gli sviluppatori sono incoraggiati a utilizzare la più moderna finestra di dialogo Condividi, che può eseguire tutte le stesse funzioni di queste finestre di dialogo precedenti, ma può anche pubblicare storie Open Graph personalizzate senza richiedere l'accesso a Facebook. sviluppatori.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails

Se possibile, suggerirei di utilizzare l'SDK di Facebook con JavaScript. È molto più facile programmare e lo considero molto meno esigente rispetto all'utilizzo del modulo di collegamento sopra. Dai un'occhiata a: developers.facebook.com/docs/sharing/web
LiquidDrummer

12
@LiquidDrummer il punto centrale dell'utilizzo di questi tipi di URL è che non è necessario utilizzare l'SDK . Aggiunge un inutile colpo di prestazioni alla tua pagina, aiuta FB a invadere la privacy delle persone e non è più semplice di un semplice <a>tag o open()chiamata.
Walf

98

A partire dal 18 luglio 2017 Facebook ha deciso di ignorare i parametri personalizzati impostati dagli utenti. Questa scelta blocca molte delle possibilità offerte da questa risposta e interrompe anche i pulsanti utilizzati su diversi siti Web.

I parametri quotee hashtagfunzionano a partire da dicembre 2018.


Qualcuno sa se ci sono stati cambiamenti recenti che avrebbero potuto improvvisamente impedirne il funzionamento?

I parametri sono cambiati. La risposta attualmente accettata afferma:

Facebook non supporta più i parametri personalizzati in sharer.php

Ma questo non è del tutto corretto. Bene, forse non li supportano o li approvano , ma è possibile utilizzare parametri personalizzati se si conoscono i nomi corretti. Questi includono:

  • URL (ovviamente) → u
  • immagine personalizzata → picture
  • titolo personalizzato → title
  • preventivo personalizzato → quote
  • descrizione personalizzata → description
  • didascalia (aka nome sito web) → caption

Ad esempio, puoi condividere questa stessa domanda con il seguente 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.

Provalo!

Ho creato uno strumento che semplifica la condivisione degli URL su Facebook con parametri personalizzati. Puoi usarlo per generare il tuo sharer.phpcollegamento, basta premere il pulsante e copiare l'URL dalla scheda che si apre.


2
Grazie mille, fantastico!
Nightmare_82

1
@ TakácsZsolt Non hai bisogno di JS sulla pagina, puoi semplicemente generare l'URL lato server nel tuo CMS o il codice personalizzato e quindi fornire all'utente un semplice URL. Il pulsante di condivisione ufficiale non funziona perché include tonnellate di KB di codice JS e tiene traccia degli utenti. Inoltre, se condividi i tuoi URL, è meglio che servano tag OpenGraph appropriati invece di fare affidamento sui parametri condivisori di Facebook. :)
Andrea Lazzarotto

1
@Garavani, sì hai ragione. Come discusso nei commenti dello strumento, hanno deprecato i parametri e li hanno rimossi.
Andrea Lazzarotto

4
Ad aprile 2018 sembra che tutti i parametri diversi da quelli usiano silenziosamente ignorati.
leo

1
Oltre uall'unico parametro che vedo riflesso èquote
robskrob

3

Il tuo problema è causato dalla mancanza dei marcatori OpenGraph, come dici tu non è possibile che tu implementi per qualche motivo.

Per te, l'unica soluzione è utilizzare l' API Facebook di PHP .

  1. Per prima cosa devi creare l'applicazione nel tuo account Facebook.
  2. Quando crei l'applicazione avrai due dati chiave per il tuo codice:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Scarica l'SDK PHP di Facebook da qui .

  4. Puoi iniziare con questo codice per condividere contenuti dal tuo sito:

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

Puoi trovare altri esempi nel sito degli sviluppatori di Facebook:

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


3
Hai ragione Giuseppe, e spero che le informazioni che hai fornito siano utili a qualcuno che trova questa pagina. Per questo ho votato a favore. Solo non l'ho contrassegnato come risposta perché sapevamo già che avremmo dovuto tornare a PHP se Facebook non avesse ripristinato le modifiche apportate. La soluzione completa che spero in un modo per utilizzare l'URL condivisore è un modo simile a come funzionava, potrebbe non esistere ora o in futuro. Ma grazie per la tua risposta e spero che sarà utile a qualcuno in questa situazione.
fino al

2

Rivedo il tuo URL in uso:

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

e vedi queste differenze:

  1. L'URL condivisore non è lo stesso.
  2. Le corde sono in ordine diverso. (Non so se questo influisce).

Uso questa stringa 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

Nella sezione "titolo" e "riepilogo", utilizzo la funzione php in urlencode();questo modo:

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

E funziona bene per me.


Funziona ancora dalla tua parte? Quando provo il tuo URL di esempio, non visualizzo il titolo e il riepilogo!
vcarel

1
@vcarel Funziona solo con OpenGraph, questo è il problema. Pubblica un metodo diverso in un'altra risposta.
Joseph Collins,

@JosephCollins In risposta alle tue differenze: 1. L'URL "hxxp: //facebook.com/sharer.php" reindirizza semplicemente a "hxxp: //facebook.com/sharer/sharer.php", presumo sia compatibile con le versioni precedenti con una precedente funzione di condivisione. 2. L'ordine dei campi non fa differenza. Ho provato il tuo ordine per ogni evenienza, ancora un problema. Come ho detto nella mia domanda originale, questo ha funzionato correttamente, poi un giorno non ha funzionato senza modifiche alla nostra fine. È stato accettato come un bug da Facebook, quindi non è solo un problema di formato URL. Ma sicuramente si stanno prendendo il loro tempo dolce per fare qualcosa al riguardo.
tutto il

-1

Se codifichi & nel tuo URL a% 26, funziona correttamente. Appena testato e verificato.


Coperto da altre risposte e anche non abbastanza approfondito da aggiungere valore.
utechtzs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.