无法通过FB.api函数将.php文件链接到Facebook Graph

时间:2012-01-12 22:43:06

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

我成功实施了Facebook Recipe Box教程。现在我想进行一些修改,以便不是总是发布带有静态打开图标签的HTML文件,而是发布.php文件,这将允许我动态地更改这些标签。我想发布的php是以下内容:

<?php
function curPageURL() {
 $pageURL = 'http://';
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
     return $pageURL;
    }
    ?>

    <html>
  <head prefix="og: http://ogp.me/ns# wishlisteight:   http://ogp.me/ns/fb/wishlisteight#">
          <meta property="fb:app_id"         content="366730473342905">
  <meta property="og:url"         content="<?php echo strip_tags(curPageURL());?>">
  <meta property="og:type"                content="carpenterben:nail">
  <meta property="og:title"               content="<?php echo strip_tags($_REQUEST['name']);?>">
      <meta property="og:image"               content="http://cdn2.digitaltrends.com/wp-content/uploads/2011/11/google_logo.jpg">
      <title>Product Name</title>
  </head>
    <body> 
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
    FB.init({ 
        appId:'366730473342905', cookie:true, 
        status:true, xfbml:true, oauth:true
    });
    </script>

    <fb:add-to-timeline></fb:add-to-timeline>

    <h3>
        <font size="30" face="verdana" color="grey">
             Stuffed Cookies
        </font> 
    </h3> 
    <p>
        <img title="Stuffed Cookies" 
                        src="http://www.thepropagator.com/facebook/RecipeBox/cookie.jpg" 
                        width="550"/><br />
    </p>       
</body> 
</html>

我用来做帖子的代码如下:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">

   <head prefix="og: http://ogp.me/ns# carpenterben: http://ogp.me/ns/apps/carpenterben#">
    <meta property="fb:app_id" content="366730473342905" />
<meta property="og:type" content="carpenterben:nail" />
<meta property="og:title" content="Oreo Stuffed Cookies" />
<meta property="og:image" content="http://www.thepropagator.com/facebook/RecipeBox/cookie.jpg" />
<meta property="og:description" content="The Turducken of Cookies" />
<meta property="og:url" content="http://www.thepropagator.com/facebook/Carpenter/nail.php">

    <script type="text/javascript">
    function postCook()
    {
      FB.api('/me/carpenterben:hammer&nail=http://www.thepropagator.com/facebook/Carpenter/nail.php?name=great','post',  function(response) {
        if (!response || response.error) {
            alert('Error occured');
          } else {
            alert('Post was successful! Action ID: ' + response.id);
          }
    });
}
    </script>
</head>

<body>
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
    FB.init({
        appId:'366730473342905', cookie:true,
                status:true, xfbml:true, oauth:true
    });
    </script>
    <fb:add-to-timeline></fb:add-to-timeline>>
    <h3>
        <font size="30" face="verdana" color="grey">Stuffed Cookies
        </font>
    </h3>
    <p>
        <img title="Oreo Stuffed Cookies" src="http://www.thepropagator.com/facebook/RecipeBox/cookie.jpg" width="550"/><br />
    </p>

    <form>
        <input type="button" value="Cook" onclick="postCook()" />
    </form>

    <fb:activity actions="carpenterben:hammer"></fb:activity>
</body>

这会返回错误,但第二次我将文件扩展名更改为HTML一切正常。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

您必须编码(escape())您传递的URL作为参数:

<强>前

/me/carpenterben:hammer&nail=http://www.thepropagator.com/facebook/Carpenter/nail.php?name=great

<强>后

/me/carpenterben:hammer&nail=http%3A//www.thepropagator.com/facebook/Carpenter/nail.php%3Fname%3Dgreat

做一些像

这样的事情
function postCook()
{
   url = escape('http://www.thepropagator.com/facebook/Carpenter/nail.php?name=great')   
   FB.api('/me/carpenterben:hammer&nail='+url,'post',  function(response) {
    if (!response || response.error) {
        alert('Error occured');
      } else {
        alert('Post was successful! Action ID: ' + response.id);
      }
});