如何使用调用URL中的参数将操作发布到Facebook Graph API

时间:2012-01-24 05:30:15

标签: facebook facebook-graph-api facebook-javascript-sdk facebook-php-sdk

首先,我花了几个小时寻找答案并且已经关闭但没有找到完整的答案。

所以我试图使用Facebook的Graph API发布动作,并希望在最初使用Facebook Javascript SDK调用时在URL中发送参数。

这是一个名为WORKS的电话:

  function postNewAction()
  {
          passString = '&object=http://mysite.com/appnamespace/object.php';

          FB.api('/me/APP_NAMESPACE:ACTION' + passString,'post',
             function(response) {
                  if (!response || response.error) {
                      alert(response.error.message);
                  } 
                  else {
                      alert('Post was successful! Action ID: ' + response.id);
                  } 
              }
          );    
   }

使用object.php如下:

  <head xmlns:enemysearch="http://apps.facebook.com/APP_NAMESPACE/ns#">
    <meta property="fb:app_id" content="APP_ID" /> 
    <meta property="og:type" content="APP_NAMESPACE:object" /> 
    <meta property="og:title" content="some title" />
    <meta property="og:description" content="some description"/> 
    <meta property="og:locale" content="en_US" />
    <meta property="og:url" content="http://www.mysite.com/appnamespace/object.php"/>
  </head>

很明显,上面会向Facebook发布一些动作,每次调用object.php时都会一样。

这对我来说并不理想。

所以我看了this thread并且它有所帮助,但正如您将看到的,并没有回答所有问题。

因此,如果我通过使用来自GET或POST的内容更改object.php以包含动态生成的元标记,并使用与og:url中提供的URL格式匹配的Object Debugger,则调试器会显示所有内容正如我现在所预期的那样工作警告。以下是动态生成的object.php的样子:

   <?php
      if(count($_GET) > 0) {
     $userName = (int)$_GET['userName'];
      }
      else {
     $userName = (int)$_POST['userName'];
      }
   ?>
  <head xmlns:enemysearch="http://apps.facebook.com/APP_NAMESPACE/ns#">
    <meta property="fb:app_id" content="APP_ID" /> 
    <meta property="og:type" content="APP_NAMESPACE:object" /> 
    <meta property="og:title" content=" <?php echo $userName; ?>" />
    <meta property="og:description" content="Click to view more from <?php echo $userName; ?>"/> 
    <meta property="og:locale" content="en_US" />
    <meta property="og:url" content="http://mysite.com/appnamespace/object.php?userName=<?php echo $userName; ?>"/>
  </head>

所以,我需要知道的是如何在初始调用中发送url参数。如果我使用调试器并输入http://mysite.com/appnamespace/object.php?userName=Brad的效果,一切正常,元标记返回其中包含该名称的内容。但是,如果我尝试在Javascript调用中传递相同的url,它会返回一个错误,说我的元属性og:type需要是'APP_NAMESPACE:object'(如上所示,这就是我所拥有的)而不是'website '(正如你在上面看到的,是我没有使用的东西)。这是破碎的电话会是什么样的:

  function postNewAction(userName)
  {
      passString = '&object=http://mysite.com/appnamespace/object.php?userName=' + userName;

      FB.api('/me/APP_NAMESPACE:ACTION' + passString,'post',
         function(response) {
              if (!response || response.error) {
                  alert(response.error.message);
              } 
              else {
                  alert('Post was successful! Action ID: ' + response.id);
              } 
          }
      );    
  }

要明确的是,userName变量仅用于举例。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我没有对它进行测试,但我看到的内容与此链接中的代码示例不同

http://developers.facebook.com/docs/opengraph/tutorial/#publish

在您的代码中passString应该以{{1​​}}开头,因为它是查询字符串的开头。

?