Как использовать график FB для публикации сообщения в ленте (стене)


Я создал приложение, и теперь я хочу опубликовать сообщение на стене одного из моих друзей с использованием нового API Graph. Это выполнимо?

Я уже использую OAuth и Graph-api, чтобы получить список всех моих друзей. API в http://developers.facebook.com/docs/api говорит мне свернуться https://graph.facebook.com /[идентификатор пользователя]/лента, чтобы прочитать ленту, но она также сообщает мне, как опубликовать сообщение:

curl -F 'access_token=[...]' -F 'message=Hello, Arjun. I like this new API.' https://graph.facebook.com/arjun/feed

Конечно, это не работает! И я не могу это выяснить почему..

Вот мой PHP-код:

require_once 'facebook.php'; // PHP-SDK downloaded from http://github.com/facebook/php-sdk
$facebook = new Facebook(array(appId=>123, secret=>'secret'));
$result = $facebook->api(
        '/me/feed/',
        array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..')
);

Этот код не выдает никаких ошибок, и я знаю, что мой access_token верен (в противном случае я не смог бы запустить $facebook->api('/me?access_token='.$this->access_token); чтобы получить мой объект пользователя.

Кто-нибудь успешно разместил сообщение с использованием Graph-api? Тогда мне нужна ваша помощь! :-)

Author: qualbeen, 2010-05-06

7 answers

Ладно, я наконец-то решил эту проблему. Спасибо phpfour за вашу помощь:-)

Во-первых: Мой URL-адрес подключения выглядит так (с "publish_stream"):

$connectUrl = $this->getUrl(
  'www',
  'login.php',
  array_merge(array(
    'api_key'         => $this->getAppId(),
    'cancel_url'      => $this->getCurrentUrl(),
    'req_perms'       => 'publish_stream',
    'display'         => 'page',
    'fbconnect'       => 1,
    'next'            => $this->getCurrentUrl(),
    'return_session'  => 1,
    'session_version' => 3,
    'v'               => '1.0',
  ), $params)
);

Второй; Я пытался опубликовать сообщение в facebook через

$result = $facebook->api(
    '/me/feed/',
    array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..')
);

Но правильный способ сделать это - включить еще один параметр ("сообщение"):

$result = $facebook->api(
    '/me/feed/',
    'post',
    array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..')
);
 18
Author: qualbeen, 2010-05-13 13:24:21

Для записи в ленту вам потребуется расширенное разрешение "publish_stream". Вот их полный список: http://developers.facebook.com/docs/authentication/permissions.

Чтобы получить расширенное разрешение, получите маркер авторизации следующим образом:

https://graph.facebook.com/oauth/authorize?
client_id=...&
redirect_uri=http://www.example.com/callback&
scope=publish_stream
 6
Author: Mohammad Emran Hasan, 2011-11-14 06:54:23

Как указано в ссылке: введите описание ссылки здесь

<?php 
  $app_id = "YOUR_APP_ID";
  $app_secret = "YOUR_APP_SECRET";
  $my_url = "YOUR_POST_LOGIN_URL"; 
  $code = $_REQUEST["code"];
  if(empty($code)) {
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&amp;redirect_uri=" . urlencode($my_url) . "&amp;scope=email";
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
  }
  $token_url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $app_id . "&amp;redirect_uri=" . urlencode($my_url)
    . "&amp;client_secret=" . $app_secret
    . "&amp;code=" . $code;
  $access_token = file_get_contents($token_url);
  $graph_url="https://graph.facebook.com/me/permissions?".$access_token;
  echo "graph_url=" . $graph_url . "<br />";
  $user_permissions = json_decode(file_get_contents($graph_url));
  print_r($user_permissions);
?>
 1
Author: Konstantinos, 2011-05-06 17:53:33

Чтобы уточнить, "post" здесь относится к методу HTTP, как в GET/POST. См. https://github.com/facebook/php-sdk/blob/master/src/base_facebook.php : защищенная функция _граф($путь, $метод = 'ПОЛУЧИТЬ', $параметры =массив())

$результат = $facebook->api( '/я/лента/', 'сообщение', массив ('access_token'=> $this->access_token, 'сообщение'=> 'Игра с графом FB..') );

 1
Author: edibleEnergy, 2011-08-03 16:43:09

В дополнение к швейцарским франкам,

После публикации:

$getLinkToken='https://graph.facebook.com/oauth/access_token'.
              '?client_id=YOUR_APPID'.
              '&redirect_uri=YOUR_SITE'.
              '&client_secret=YOUR_SECRET'.
              '&code=CODE_KEY';

Я получил ответ:

 https://graph.facebook.com/oauth/access_token?
    client_id=xxxxxxxxxxxxxx
    &redirect_uri=myurl
    &client_secret=xxxxxxxxxxxxxx
    &code=xxxxxxxxxxxxxx

Нет, какой из них access_token, client_secret или код

$facebook->api( '/YOUR_APPID/feed/', 'post', 
array('access_token' => $this->access_token,
'message' => 'Playing around with FB Graph..'));
 1
Author: Saboor, 2012-12-14 07:38:51

Это старый способ получить доступ. На ГРАФИКЕ сначала я сгенерировал код ключ с:

$getLinkCode ='https://graph.facebook.com/oauth/authorize'.
              '?client_id=YOUR_APPID'.
              '&redirect_uri=YOUR_SITE'.
              '&scope=publish_stream';

И теперь, когда у нас есть код ключ, мы можем сгенерировать access_token по ссылке:

$getLinkToken='https://graph.facebook.com/oauth/access_token'.
              '?client_id=YOUR_APPID'.
              '&redirect_uri=YOUR_SITE'.
              '&client_secret=YOUR_SECRET'.
              '&code=CODE_KEY';

Но этот access_token публикует ваше сообщение как ПОЛЬЗОВАТЕЛЬ, а не как ПРИЛОЖЕНИЕ... ПОЧЕМУ?!

Если вы хотите разместить сообщение на стене приложения, используйте:

$facebook->api( '/YOUR_APPID/feed/', 'post', array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..'));
 0
Author: chf, 2010-06-19 01:21:48

Вместо использования приведенного ниже кода

[facebook dialog:@"feed"
 andParams:params 
 andDelegate:self]; 

Используйте следующее решение

[facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self];
 0
Author: codercat, 2012-11-28 06:52:32