Czy Facebook sharer.php zmienił się i nie akceptuje już szczegółowych parametrów?

103

Otwieraliśmy wyskakujące okienko udostępniania (przez window.open) z adresem URL takim jak

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

i do jakiegoś nieznanego momentu w ostatnim miesiącu wszystko było w porządku.

To, co dzieje się teraz, jest; pojawia się wyskakujące okno dialogowe i poprawnie zawiera tytuł, opis, obraz i adres URL podane w parametrach ciągu zapytania, ale po przesłaniu wpisu w wynikowym poście na ścianie na Facebooku brakuje tytułu, opisu i obrazu, chociaż nadal prowadzi do poprawny adres URL.

Czy ktoś wie, czy nastąpiły ostatnio zmiany, które mogłyby nagle zatrzymać to działanie?

Uprzedzanie niektórych typowych odpowiedzi:

  • „Sharer.php URL został przestarzały” - używanie wydawało się być kontynuowane i wydawało się, że konsensus był taki, że w dużej mierze uważano, że jest on w pobliżu - nie widziałem żadnych konkretnych wskazówek, że powinien nagle przestać działać - mógł coś przeoczyć

  • „Użyj JavaScript SDK / tych metatagów OG” - niemożliwe w mojej konkretnej sytuacji - po prostu mi zaufaj ... Mogę wyjaśnić, jeśli NAPRAWDĘ chcesz, ale to naprawdę nie ma znaczenia.

  • „Użyj okna dialogowego kanału” - nieodpowiednie ze względu na brak obsługi wysyłania postów z załącznikami na stronach FB

tdous
źródło
Jest błąd na Facebooku zarejestrowany przez kogoś innego tutaj developers.facebook.com/bugs/563991033677853, więc sugeruję każdemu, kto ma ten problem, aby pomógł oznaczyć to na FB, udając się tam i potwierdzając, że również masz ten problem.
tdous
AKTUALIZACJA dla każdego, kto ma ten sam problem ... Inne osoby, które zgłosiły to jako błąd na Facebooku, nie były zbyt gorące w podawaniu szczegółów z góry lub odpowiadaniu na informacje, więc ponownie przesłałem nowy raport o błędzie i został on przypisany do programisty. Czekam tylko na wieści z FB. developers.facebook.com/x/bugs/357750474364812
tdous
4
Niestety, przyjęta odpowiedź jest prawidłowa. Po 3 miesiącach oczekiwania na "naprawienie" błędu zmienili akceptowane zachowanie sharer.php, więc tych parametrów nie można już używać.
tdous

Odpowiedzi:

105

Facebook nie obsługuje już parametrów niestandardowych w sharer.php

Osoba udostępniająca nie będzie już akceptować parametrów niestandardowych, a Facebook będzie pobierać informacje wyświetlane w podglądzie w taki sam sposób, w jaki pojawiałyby się na Facebooku jako post z metatagów url OG.

Użyj dialog / feeds zamiast 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

Oficjalna odpowiedź od zespołu fb

jsnjack
źródło
1
Pokonaj mnie, odpowiadając na własne pytanie;)
tdous
32
ale w tym przypadku potrzebujesz identyfikatora aplikacji. A jeśli to tylko strona internetowa?
Niemiecki Capuano
3
Z Facebooka: okno dialogowe kanału dla sieci Web zostało wycofane w wersji interfejsu API 2.0. W Internecie zachęca się programistów do korzystania z nowocześniejszego okna udostępniania, które może wykonywać wszystkie te same funkcje, co te starsze okna dialogowe, ale może dodatkowo publikować niestandardowe historie Open Graph bez konieczności logowania się na Facebooku. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Jeśli to możliwe, sugerowałbym użycie Facebook SDK z JavaScriptem. Jest o wiele łatwiejszy do kodowania i uważam, że jest znacznie mniej wybredny niż użycie powyższego formularza linku. Spójrz na: developers.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer Cały sens korzystania z tego typu adresów URL polega na tym, że nie musisz używać zestawu SDK . Dodaje niepotrzebną wydajność do twojej strony, pomaga FB naruszać prywatność ludzi i nie jest prostsza niż zwykły <a>tag lub open()połączenie.
Walf
98

Począwszy od 18 lipca 2017 Facebook zdecydował się zignorować niestandardowe parametry ustawione przez użytkowników. Ten wybór blokuje wiele możliwości, jakie daje ta odpowiedź, a także łamie przyciski używane na kilku stronach internetowych.

quoteI hashtagparametry pracy jak od grudnia 2018 r.


Czy ktoś wie, czy nastąpiły ostatnio zmiany, które mogłyby nagle zatrzymać to działanie?

Parametry uległy zmianie. Obecnie akceptowana odpowiedź brzmi:

Facebook nie obsługuje już parametrów niestandardowych w sharer.php

Ale to nie jest całkowicie poprawne. No, może nie wspierać lub poprzeć je, ale niestandardowe parametry mogą być wykorzystywane , jeśli znasz poprawnych nazw. Obejmują one:

  • URL (oczywiście) → u
  • obraz niestandardowy → picture
  • tytuł niestandardowy → title
  • wycena niestandardowa → quote
  • opis niestandardowy → description
  • podpis (nazwa strony internetowej) → caption

Na przykład możesz udostępnić to pytanie pod następującym adresem 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.

Spróbuj!

Zbudowałem narzędzie, które ułatwia udostępnianie adresów URL na Facebooku z niestandardowymi parametrami. Możesz go użyć do wygenerowania sharer.phplinku, po prostu naciśnij przycisk i skopiuj adres URL z otwartej karty.

Andrea Lazzarotto
źródło
2
Wielkie dzięki, to świetnie!
Nightmare_82,
1
@ TakácsZsolt Nie potrzebujesz JS na stronie, możesz po prostu wygenerować adres URL po stronie serwera w swoim CMS lub niestandardowym kodzie, a następnie podać użytkownikowi prosty adres URL. Oficjalny przycisk udostępniania jest zły, ponieważ zawiera mnóstwo KB kodu JS i śledzi użytkowników. Ponadto, jeśli udostępniasz własne adresy URL, lepiej podawaj odpowiednie tagi OpenGraph, zamiast polegać na parametrach udostępniania na Facebooku. :)
Andrea Lazzarotto
1
@Garavani, tak, masz rację. Jak omówiono w komentarzach do narzędzia, wycofali oni parametry i usunęli je.
Andrea Lazzarotto
4
Od kwietnia 2018 wydaje się, że wszelkie parametry inne niż usą po cichu ignorowane.
leo
1
Innym niż ujedynym parametrem, który widzę, jest odzwierciedleniequote
robskrob
3

Twój problem jest spowodowany brakiem markerów OpenGraph, ponieważ mówisz, że z jakiegoś powodu nie jest możliwe, abyś zaimplementował.

Dla Ciebie jedynym rozwiązaniem jest użycie API PHP Facebook .

  1. Najpierw musisz utworzyć aplikację na swoim koncie na Facebooku.
  2. Tworząc aplikację będziesz mieć dwa kluczowe dane do swojego kodu:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Pobierz pakiet Facebook PHP SDK stąd .

  4. Możesz zacząć od tego kodu, aby udostępniać treści ze swojej witryny:

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

Więcej przykładów znajdziesz w witrynie Facebook Developers:

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

Joseph Collins
źródło
3
Masz rację, Joseph i mam nadzieję, że podane przez Ciebie informacje są przydatne dla kogoś, kto znajdzie tę stronę. Z tego powodu zagłosowałem za tym. Nie zaznaczyłem tego tylko jako odpowiedź, ponieważ już wiedzieliśmy, że będziemy musieli wrócić do PHP, jeśli Facebook nie przywróci wprowadzonych przez siebie zmian. Kompletne rozwiązanie, na które mam nadzieję, sposób korzystania z adresu URL udostępniającego jest podobny do sposobu, w jaki działał, może nie istnieć teraz lub w przyszłości. Ale dziękuję za twoją odpowiedź i ufam, że przyda się komuś w tej sytuacji.
tdous
2

Sprawdzam Twój używany adres URL:

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

i zobacz te różnice:

  1. Adres URL osoby udostępniającej nie jest taki sam.
  2. Struny są w innej kolejności. (Nie wiem, czy to wpływa).

Używam tego adresu 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

W sekcji „tytuł” ​​i „podsumowanie” używam funkcji php w urlencode();następujący sposób:

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

I działa dobrze dla mnie.

Joseph Collins
źródło
Czy nadal działa po Twojej stronie? Kiedy wypróbowuję Twój przykładowy adres URL, tytuł i podsumowanie nie są wyświetlane!
vcarel
1
@vcarel Działa to tylko z OpenGraph, to jest problem. Opublikuj inną metodę w innej odpowiedzi.
Joseph Collins,
@JosephCollins W odpowiedzi na Twoje różnice: 1. Adres URL „hxxp: //facebook.com/sharer.php” po prostu przekierowuje do „hxxp: //facebook.com/sharer/sharer.php”, zakładam, że jest kompatybilny wstecz z poprzednią funkcją udostępniania. 2. Kolejność pól nie ma znaczenia. Spróbowałem twojego zamówienia na wszelki wypadek, nadal jest problem. Jak powiedziałem w moim pierwotnym pytaniu, to zadziałało poprawnie, a potem pewnego dnia nie bez żadnych zmian na końcu. Został zaakceptowany jako błąd przez Facebooka, więc nie jest to tylko problem z formatem adresu URL. Ale z pewnością nie spieszą się, robiąc cokolwiek z tym.
tdous
-1

Jeśli zakodujesz & w swoim adresie URL do% 26, to działa poprawnie. Właśnie przetestowane i zweryfikowane.

Kyle Graham
źródło
Objęte innymi odpowiedziami, a także niewystarczająco dokładne, aby dodać wartość.
utechtzs