Как использовать FB Graph для публикации сообщения на ленте (стене)
Я создал приложение, и теперь я хочу опубликовать сообщение на одной из стен моих друзей с помощью нового Graph API. Возможно ли это?
Я уже использую oAuth и Graph-api, чтобы получить список всех моих друзей.
API http://developers.facebook.com/docs/api сообщает мне cURL https://graph.facebook.com/[userid]/feed, чтобы прочитать канал, но он также сообщает мне, как отправить сообщение:
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? Тогда я нужна ваша помощь!:-)
Ответы
Ответ 1
Хорошо, я, наконец, решил это. Thanx to 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..')
);
Но правильный способ сделать это - включить еще один параметр ('post'):
$result = $facebook->api(
'/me/feed/',
'post',
array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..')
);
Ответ 2
Для записи в фид вам понадобится расширенное разрешение 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
Ответ 3
В дополнение к chf,
После публикации:
$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..'));
Ответ 4
Как говорится в ссылке: введите ссылку здесь
<?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 . "&redirect_uri=" . urlencode($my_url) . "&scope=email";
echo("<script>top.location.href='" . $dialog_url . "'</script>");
}
$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&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);
?>
Ответ 5
Чтобы пояснить, "post" здесь относится к методу HTTP, как в GET/POST.
См. https://github.com/facebook/php-sdk/blob/master/src/base_facebook.php:
защищенная функция _graph ($ path, $method = 'GET', $params = array())
$result = $facebook- > api ( '/Меня/корм/', 'после', array ('access_token' = > $this- > access_token, 'message' = > 'Игра с FB Graph..') );
Ответ 6
Это старый способ получить доступ. В GRAPH сначала я сгенерировал код с:
$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..'));
Ответ 7
Вместо использования приведенного ниже кода
[facebook dialog:@"feed"
andParams:params
andDelegate:self];
Используйте следующее решение
[facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self];