3

我在发布这个问题之前搜索了一个小时,所以如果这是一个基本的、密集的问题,请提前原谅我。我觉得一定有一些简单的事情我没有绕圈子。

我看到很多应用程序,例如“WeForPresident”,加入时会发布一个简单的提要。它不包含特殊格式,仅包含图像、指向外部站点的链接和一些文本。

我找不到使用图形 api 执行此操作的方法。当我使用链接参数发布时,我得到了“共享链接”格式,这是不受欢迎的。然而,使用消息参数不允许链接。

那么,WeForPresident 等 App 是如何实现这种效果的呢?

再次感谢。


赏金信息

使用带有消息、链接、描述、图片、名称的 /TEST_USER_ID/feed

帖子作为链接

链接为

添加了操作参数

无链接

用户谈论的相关应用程序

没有

注意帖子中没有提到任何共享

4

3 回答 3

6

你在谈论这样的事情吗?

在此处输入图像描述

这可以通过开放图形对象和操作来实现。这是一个简短的(希望不是非常混乱)细分:

对象:在上图中,对象是“需要家的宠物”。对象是描述您碰巧正在共享的页面的文本,并在您正在共享的页面的标题标签中引用(稍后会详细介绍。)

行动:在上图中,指的是“...共享一个需要家的宠物...”中的“共享”。操作是您实际使用开放图形所做的任何事情。我见过一些网站“在某某上签名请愿书”或“在某某应用程序上某某词”。粗体字是动作。

动作和对象类型都可以在http://developers.facebook.com上定义。如果/当您有一个应用程序,并且您选择使用 Open Graph,它会鼓励您创建至少一种操作和一种对象类型。有许多预定义的(“读书”、“烹饪食谱”、“观看视频”等)。动作和对象可帮助您个性化发布到人们墙上的消息。

值得注意的是,如果您定义了自定义操作,Facebook 需要先批准它,然后他们才愿意让任何人使用它。通常这不是很困难......您只需单击操作旁边的“提交”按钮,它会告诉您是否/何时获得批准。


所以现在我们已经了解了基础知识,让我们谈谈如何在你的页面上实现这样的东西。我相信您很清楚,Open Graph 使用 FB.api() 而不是 FB.ui()。我将在这里使用 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> 标签中还需要两个非常重要的标签。他们在这里:

<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 上的应用详细信息部分中找到的命名空间。您可能需要定义一个命名空间(设置->基本->第二个文本框)。“:”打破了命名空间和动作。分享是行动(再次在developers.facebook.com 上定义)。

'post',

告诉 Facebook 我们要使用 POST 请求(而不是 GET 请求)。

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

这是(显然)两个重要值的 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 回答