3

この質問を投稿する前に1時間検索しましたので、これが基本的で密度の高い質問である場合は、事前にご容赦ください。頭を包み込んでいないシンプルなものがあるに違いない気がします。

「WeForPresident」など、参加すると簡単なフィードを投稿するアプリがたくさんあります。特別なフォーマットは含まれていません。画像、外部サイトへのリンク、およびテキストのみが含まれています。

グラフAPIでこれを行う方法が見つかりません。リンクパラメータを使用して投稿すると、「リンクの共有」フォーマットが表示されますが、これは望ましくありません。それでも、メッセージparamを使用してもリンクは許可されません。

では、WeForPresidentなどのアプリはどのようにしてこの効果を達成しているのでしょうか。

再度、感謝します。


バウンティ情報

メッセージ、リンク、説明、画像、名前で/ TEST_USER_ID/feedを使用する

リンクとして投稿

としてリンク

アクションパラメータが追加されました

リンクなし

そして、ユーザーが話している問題のアプリケーション

それなし

投稿のどこにも共有が記載されていないことに注意してください

4

3 に答える 3

6

このようなことについて話しているのですか?

ここに画像の説明を入力

これは、Open Graph オブジェクトとアクションによって可能になります。以下は、簡単な (そして、ひどく混乱しないことを願っています) 内訳です。

オブジェクト: 上の画像では、オブジェクトは「家が必要なペット」です。オブジェクトは、たまたま共有しているページを説明するテキストであり、共有しているページのヘッダー タグで参照されます (これについてはすぐに説明します)。

アクション: 上の画像では、「...家が必要なペットを共有しています...」の「共有」を参照しています。アクションは、開いているグラフで実際に行っていることです。「これこれの請願書に署名する」または「これこれのアプリでこれこれの言葉を再生する」サイトを見たことがあります。太字はアクションです。

アクションとオブジェクト タイプの両方をhttp://developers.facebook.comで定義できます。アプリを持っていて Open Graph を使用する場合、少なくとも 1 つのアクションと 1 つのオブジェクト タイプを作成することが推奨されます。あらかじめ定義されたものがいくつかあります (「本を読む」、「レシピを作る」、「ビデオを見る」など)。アクションとオブジェクトは、ユーザーのウォールに投稿するメッセージをパーソナライズするのに役立ちます。

カスタム アクションを定義する場合、Facebook はそれを承認してから、誰でも使用できるようにする必要があることに注意してください。通常はそれほど難しいことではありません...アクションの横にある「送信」ボタンをクリックするだけで、承認されたかどうか、いつ承認されたかがわかります。


これで基本的なことは終わりです。次は、このようなものをページに実装する方法について説明しましょう。ご承知のとおり、Open Graph は FB.ui() の代わりに FB.api() を使用します。ここでは Javascript の例を使用します。

  FB.api(
    '/me/app_namespace:share',
    'post',
    {
       pet_who_needs_a_home: document.location.href,
       image: pet_image // optional
    },
    function(response) {
      // You can do something with the response here.
      // If successful, Facebook returns the post id of the post it just made
      // If it fails, check response.error
    }
  );

<head> タグに必要な 2 つの非常に重要なタグもあります。そして、ここにそれらがあります:

<meta property="fb:app_id" content="YOUR_APP_ID" />
<meta property="og:type" content="APP_NAMESPACE:pet_who_needs_a_home" />

それでは、すべてが何であるかについてお話ししましょう。FB.api() はかなり明白なので、スキップします...

'/me/app_namespace:share',

/me があなたのウォールに投稿しています。app_namespace は、developers.facebook.com のアプリの詳細セクションにある名前空間です。名前空間を定義する必要がある場合があります (設定 -> 基本 -> 2 番目のテキスト ボックス)。「:」は名前空間とアクションを分割します。Share はアクションです (ここでも、developers.facebook.com で定義されています)。

'post',

(GET リクエストではなく) POST リクエストを使用することを Facebook に伝えます。

{
   pet_who_needs_a_home: document.location.href,
   image: pet_image // optional
},

これは (明らかに) 2 つの重要な値の JavaScript 配列です。"pet_who_needs_a_home" は (実際には私の...あなたのものに置き換える必要があります) オブジェクト タイプ (まだ developers.facebook.com にあります) です。これは、上の画像のように、使用する言語を定義するのに役立ちます。画像は、開いているグラフを通じて共有される画像を定義できるオプションのフィールドです。あなたがチェックできる他のオプションのフィールドがたくさんあります...ご存知のとおりです。

function(response) {

...そして、それはすべて明らかなので、無意味な詳細は省きます. コメントで述べたように、成功した場合は投稿の投稿 ID、または説明的である場合とそうでない場合があるエラー (response.error で見つかった) のいずれかを返します。

メタタグがそれを物語っていることを願っています。YOUR_APP_ID は...ご想像のとおり、あなたのアプリ ID です。すべて数値。app_namespace は名前空間です。pet_who_needs_a_home は (私の) オブジェクトであり、たまたま使用しているオブジェクトに置き換える必要があります。


長い投稿で申し訳ありません。うまくいけば、そのようなことは少し解決しました。

于 2012-10-16T01:31:59.183 に答える
3

これにより、appName を介して weForPresident とまったく同じ投稿が投稿されます。それに応じてメッセージを変更してください。アクセス トークンには、publish_actions 拡張アクセス許可が必要です

$attachment =  array(
                          'access_token' => $access_token,
                          'message' => "I Just Join WeForPresident",
                          'name' => "WeForPresident",
                          'description' => "philippe harewood just started gamng the election on weForPresident and could possibly win some cool stuff",
                          'link' => "any link to external site",
                          'picture' => "image link to display in left box"
                      );

   $facebook->api("me/feed","POST",$attachment);

それが役に立てば幸い。

更新: 上記のソリューションの JavaScript ダイアログは以下のようになり、ユーザーに投稿を促すため、publish_actions 拡張アクセス許可は必要ありません。

<html xmlns='http://www.w3.org/1999/xhtml'
            xmlns:fb='https://www.facebook.com/2008/fbml'>
            <head>
              <title>My Feed Dialog Page</title>
            </head>
            <body>
              <div id='fb-root'></div>
              <script src='http://connect.facebook.net/en_US/all.js'></script>
              <p id='msg'></p>
              <script>
                FB.init({appId: '#############', status: true, cookie: true});


                  // calling the API ...
                  var obj = {
                    method: 'feed',
                    link: 'any external url',
                    picture: 'picture url to show up in left',
                    name: 'name of the post: comes as heading in blue color within box',
                    description: 'post description, that comes within box'

                    };

                  function callback(response) {

                  }

                  FB.ui(obj, callback);

              </script>
            </body>
          </html>";

そのような投稿の完全なコード: 最初にhttps://github.com/facebook/facebook-php-sdkから php-sdk をダウンロードします。

<?php
include_once "facebook-sdk/facebook.php"; 
$facebook = new Facebook(array(
          'appId' => APP_ID,
          'secret' => APP_SECRET,
        ));
if(isset($_GET['code']))
            {

                 $access_token = $facebook->getAccessTokenFromCode($_GET['code'],$_SESSION['redirect_uri']);

                $facebook->setAccessToken($access_token);
         $attachment =  array(
                          'access_token' => $access_token,
                          'message' => "$message",
                          'name' => "$name",
                          'description' => "$description",
                          'link' => "any external link",
                          'picture' => "picture url"
                      );

        $facebook->api("me/feed","POST",$attachment);
       }
         else
         {

            $scope = "publish_stream";
            $params = array('scope' => $scope);
            $loginUrl = $facebook->getLoginUrl($params);
            echo("<script> top.location.href='" . $loginUrl . "'</script>");

         }
?>
于 2012-10-17T10:12:53.483 に答える
2

これは最終的にバグであり、修正されておらず、現在の状態は「トリアージ済み」です。

http://developers.facebook.com/bugs/138798476259001

これまでの唯一の解決策は、アクションパラメーターを追加することのようです

于 2012-10-21T16:46:23.547 に答える