Чи змінився 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


Існує помилка у Facebook, яку зареєстрував хтось інший тут developers.facebook.com/bugs/563991033677853, тому я б запропонував, щоб хто-небудь інший із проблемою допомагав позначити це з FB, перейшовши туди і підтвердивши, що у вас теж є ця проблема.
tdous

ОНОВЛЕННЯ для тих, хто стикається з тією ж проблемою ... Іншим людям, які повідомили про це як про помилку у Facebook, було не так завгодно, коли вони надавали детальну інформацію або відповідали на інформацію, тому я повторно подав новий звіт про помилку, і він був призначений розробнику. Тільки чекаю почути новини з ФБ. developers.facebook.com/x/bugs/357750474364812
tdous

4
На жаль, прийнята відповідь правильна. Через 3 місяці очікування помилки "виправлено" вони змінили прийняте поведінку sharer.php, тому ці параметри більше не можна використовувати.
tdous

Відповіді:


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


1
Побийте мене, щоб відповісти на моє власне запитання;)
tdous

32
але в цьому випадку вам потрібен ідентифікатор програми Що робити, якщо це просто веб-сайт?
Німецький Капуано

3
З Facebook: Діалог подачі для Інтернету застарілий у API версії 2.0. В Інтернеті розробникам рекомендується використовувати більш сучасний діалог Share, який може виконувати всі ті ж функції, що і ці старі діалогові вікна, але може додатково публікувати власні історії з відкритим графіком, не вимагаючи входу в Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails

Якщо можливо, я б запропонував використовувати SDK Facebook з 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
Велике спасибі, це чудово!
Кошмар_82

1
@ TakácsZsolt Вам не потрібен JS на сторінці, ви можете просто генерувати URL-адресу сервера у вашій CMS або власному коді, а потім надавати користувачу просту URL-адресу. Офіційна кнопка загального користування погана, тому що вона включає тонни KB JS-коду і відстежує користувачів. Крім того, якщо ви ділитесь власними URL-адресами, краще розміщувати належні теги OpenGraph, а не посилатися на параметри спільного користування Facebook. :)
Андреа Лацаротто

1
@Garavani, так, ти маєш рацію. Як було обговорено в коментарях до інструменту, вони знецінили параметри та видалили їх.
Андреа Лацаротто

4
Станом на квітень 2018 року, схоже, будь-які параметри, крім того, що uвони мовчки ігноруються.
лео

1
Окрім uєдиного параметра, який я бачу, це відображенняquote
robskrob

3

Ваша проблема викликана відсутністю маркерів OpenGraph, так як ви говорите, що це можливо, що ви реалізуєте з якихось причин.

Для вас єдине рішення - використовувати API PHP Facebook .

  1. Спочатку потрібно створити додаток у своєму акаунті у Facebook.
  2. Під час створення програми у вас буде два ключові дані для вашого коду:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Завантажте Facebook PHP SDK звідси .

  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-адреси спільника - це аналогічний спосіб роботи раніше, може існувати не зараз, ні в майбутньому. Але дякую за вашу відповідь, і я вірю, що хтось буде корисним у цій ситуації.
tdous

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 визнав помилку Facebook, тому це не лише проблема формату URL. Але вони, звичайно, проводять свій солодкий час, роблячи щось з цього приводу.
tdous

-1

Якщо ви кодуєте & у своїй URL-адресі до% 26, він працює правильно. Просто перевірений і перевірений.


Охоплений іншими відповідями, а також недостатньо ґрунтовний, щоб додати вартість.
utechtzs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.