Как опубликовать Действия в Facebook Graph API с параметрами в URL вызова - PullRequest
1 голос
/ 24 января 2012

Для начала, я потратил несколько часов в поисках ответа и пришел ЗАКРЫТЬ, но не нашел полного ответа.

Итак, я пытаюсь опубликовать действия с помощью API Graph Facebook и хочу отправить параметры в URL при первоначальном вызове его с помощью Javascript SDK Facebook.

Вот вызов, который работает:

  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.

Это не идеально для моих целей.

Итак, я взглянул на эту ветку , и это помогло, но, как вы увидите, не отвечает на все вопросы.

Так что, если я изменю object.php, чтобы включить динамически генерируемые метатеги, используя содержимое из GET или POST, и использую Object Debugger с форматом URL, соответствующим формату, предоставленному в og: url, Отладчик показывает, что все работает так, как я ожидал, теперь с предупреждениями. Вот как выглядит динамически сгенерированный 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, все работает нормально, и метатеги возвращают содержимое с этим именем внутри них. Однако, если я пытаюсь передать тот же URL-адрес в вызове Javascript, он возвращает ошибку, говорящую, что мое мета-свойство 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 Ответ

2 голосов
/ 05 апреля 2012

Я не проверял это, но я вижу что-то отличное от примеров кода в этой ссылке

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

В вашем коде passString должно начинаться с ?, так как это самое начало строки запроса.

// so this :
passString = '&object=http://mysite.com/appnamespace/object.php?userName=' + userName;
// should be :
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);
          } 
      }
  );    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...