web-dev-qa-db-ja.com

Facebookのsharer.phpは詳細なパラメータを受け取らないように変更されましたか?

次のようなURLで共有ポップアップ(window.open経由)を開いています

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

そして先月かそこらでいくつかの未知の点まではすべてが大丈夫だった。

今起こっているのは、ポップアップダイアログが表示され、クエリ文字列パラメータによって提供されるTitle、Description、Image、およびURLが正しく含まれます。ただし、投稿が送信されると、Facebookのウォール投稿にTitle、Description、およびImageが表示されません。正しいURL.

突然これが機能しなくなった可能性がある最近の変更があったかどうかを誰かが知っていますか?

いくつかの一般的な反応を横取りする:

  • "sharer.php URLは廃止予定" - 使用方法は続いているようであり、それは主に問題が解決していると考えられているというコンセンサスのようでした - 突然動作を停止したはずの具体的な兆候は見当たりません -

  • 「JavaScript SDK /これらのOGメタタグを使用する」 - 私の特定の状況では不可能 - 私を信頼してください。

  • 「フィードダイアログを使用する」 - FBページに添付ファイルを付けて投稿するためのサポートがないため、適切ではありません

96
tdous

Facebookはsharer.phpのカスタムパラメータをサポートしなくなりました

共有者はカスタムパラメータを受け付けなくなり、facebookはプレビューに表示されている情報をurl OGメタタグからの投稿としてfacebookに表示されるのと同じ方法で取得します。

sharer.phpの代わりにdialog/feedsを使う

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チームからの公式の回答

102
jsnjack

2017年7月18日から、Facebookはユーザーが設定したカスタムパラメータを無視することを決定しました。この選択はこの答えによって提供される可能性の多くをブロックし、それはまたいくつかのウェブサイトで使用されるボタンを壊します。

quoteおよびhashtagパラメーターは、2018年12月の時点で機能します。


突然これが機能しなくなった可能性がある最近の変更があったかどうかを誰かが知っていますか?

パラメータが変更されました。現在受け入れられている答えはこう述べています。

Facebookはsharer.phpのカスタムパラメータをサポートしなくなりました

しかし、これは完全には正しくありません。まあ、多分supportまたはendorseそれら、しかし---あなたが正しい名前を知っていればカスタムパラメータを使うことができます。これらが含まれます:

  • 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.

試してみてください

私はビルドしました ツール Facebook上のURLを共有しやすくしましたカスタムパラメータを使っています。あなたはそれをあなたのsharer.phpリンクを生成するために使うことができます、ただボタンを押して、開いたタブからURLをコピーしてください。

91

あなたが何らかの理由で実装することは不可能であるとあなたが言うようにあなたの問題はマーカーOpenGraphの欠如によって引き起こされます。

あなたにとって、唯一の解決策はPHP Facebook APIを使うことです。

  1. まずあなたのFacebookアカウントでアプリケーションを作成しなければなりません。
  2. アプリケーションを作成するときに、コードには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 Developersサイトでより多くの例を見つけることができます:

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

3
Joseph Collins

使用中の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

"title"と "summary"セクションでは、私は次のようにphp関数urlencode();を使います。

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

そして私のためにうまく働いています。

1
Joseph Collins