Возникли проблемы при подключении файла .php к Facebook Graph с помощью функции FB.api. - PullRequest
3 голосов
/ 13 января 2012

Я успешно реализовал учебник 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 голосов
/ 06 марта 2012

Вы должны закодировать (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);
      }
});
...