web-dev-qa-db-fra.com

Comment utiliser FB Graph pour publier un message sur un flux (mur)

J'ai créé une application et je souhaite maintenant publier un message sur le mur de l'un de mes amis en utilisant la nouvelle API Graph. Est-ce faisable?

J'utilise déjà oAuth et Graph-api pour obtenir la liste de tous mes amis. L'API sur http://developers.facebook.com/docs/api me dit de cURL https://graph.facebook.com/[userid]/feed pour lire le flux, mais cela me dit également comment poster un message:

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

Bien sûr, cela ne fonctionne pas! Et je ne peux pas savoir pourquoi ..

Voici mon code 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..')
);

Ce code ne génère aucune erreur, et je sais que mon access_token est correct (sinon, je ne pourrais pas exécuter $ facebook-> api ('/ me? Access_token ='. $ This-> access_token); pour obtenir mon userobject.

Quelqu'un at-il posté avec succès un message en utilisant Graph-api? Alors i besoin votre aide! :-) 

12
qualbeen

Ok, j'ai finalement résolu ça. Merci à phpfour pour votre aide :-)

Premièrement: Mon URL de connexion ressemble à ceci (avec "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)
);

Seconde ; J'ai essayé de poster sur facebook via 

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

Mais la bonne façon de faire est d'inclure un paramètre supplémentaire ('post'):

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

Vous aurez besoin de l'autorisation étendue "publish_stream" pour écrire dans le flux. En voici une liste complète: http://developers.facebook.com/docs/authentication/permissions .

Pour obtenir l'autorisation étendue, obtenez le jeton d'autorisation de la manière suivante:

https://graph.facebook.com/oauth/authorize?
client_id=...&
redirect_uri=http://www.example.com/callback&
scope=publish_stream

En plus de chf ,

Après avoir posté:

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

J'ai eu la réponse:

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

non lequel est access_token, client_secret ou code 

$facebook->api( '/YOUR_APPID/feed/', 'post', 
array('access_token' => $this->access_token,
'message' => 'Playing around with FB Graph..'));
1
Saboor

Pour clarifier, "post" se réfère ici à la méthode HTTP, comme dans GET/POST. Voir https://github.com/facebook/php-sdk/blob/master/src/base_facebook.php : fonction protégée _graph ($ path, $ method = 'GET', $ params = array ())

$ result = $ facebook-> api ( '/me/feed/',[' post ', array (' access_token '=> $ this-> access_token,' message '=>' Jouer avec FB Graph .. ') );

1
edibleEnergy

Comme le lien le dit: entrez la description du lien ici

<?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
Konstantinos

C’est une vieille façon d’avoir accès. Dans GRAPH, j'ai d'abord généré le code code avec:

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

Et maintenant, lorsque nous avons code clé, nous pouvons générer access_token depuis le lien:

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

Mais cet access_token poster votre message en tant que USER pas APPLICATION ... POURQUOI?!

Si vous souhaitez publier sur le mur d'applications:

$facebook->api( '/YOUR_APPID/feed/', 'post', array('access_token' => $this->access_token, 'message' => 'Playing around with FB Graph..'));
0
chf

Au lieu d'utiliser le code ci-dessous

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

Utilisez la solution suivante

[facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self];
0
codercat