Publier sur Facebook à partir de son site
Pour être plus précis, le titre devrait être "Comment publier sur une page Facebook, à partir d'un autre site web, en utilisant PHP"
Je me suis très largement inspiré de 2 articles :
- http://blog.theunical.com/facebook-integration/publish-on-facebook-fan-page-as-fan-user-using-php/ qui présente la marche à suivre complète... Mais la partie "droits d'accès" ne fonctionne plus - je suppose, depuis le passage de Facebook à OAuth2
- pour permettre à mon application d'écrire sur le mur des pages "fans" que j'administre, j'ai utilisé http://htmyell.com/autofacebook-2-0/ - seule la partie "droits d'accès" m'intéresse !
Cet article sera donc une sorte de traduction/résumé.
On commence d'abord par créer une nouvelle application Facebook : il faut se connecter, puis aller sur http://www.facebook.com/developers/ Ensuite, on clique sur "Créer une nouvelle application", on saisit son nom et on accepte les conditions d'utilisation.
Recopiez l'identifiant de l'appli, la clef API, et la clef secrète.
Sur l'onglet "Web site", vous saisissez l'URL du site (n'oubliez pas le / final) et le nom de domaine (donc, sans http, sans www, et sans / final)
Dans l'onglet "Facebook Integration", vous cochez "Pages facebook" et vous saisissez l'URL de votre site dans "Canvas URL" (pas sûr que ce soit indispensable, par contre)
Enfin, vous cliquez sur "Enregistrer les modifications"
Vous récupérez et décompressez http://blog.theunical.com/wp-content/uploads/2010/05/facebook-platform.tar.gz
Vous allez sur https://login.facebook.com/code_gen.php?api_key=API_KEY&v=1.0 en remplaçant "API_KEY" par votre clef API.
Vous autorisez l'application, et vous obtenez en retour une "token key" - notez la.
Vous devez générer une "session key" permanente. Utilisez pour cela le code suivant en remplaçant les valeurs nécessaires :-)
<?php
// FB_APIKEY is your facebook application api key
// FB_SECRET is your application secrete key
$FB_APIKEY="YOUR_API";
$FB_SECRET="YOUR_SECRET";
$fb = new FacebookRestClient($FB_APIKEY, $FB_SECRET);
$testtoken= "ONETIMETOKEN"; // Replace this value with your Token Value
$result = $fb->call_method('facebook.auth.getSession',
array('auth_token' => $testtoken, 'generate_session_secret' => true));
echo "<br /><pre>";
print_r($result);
echo $session_key = $result['session_key'];
?>
Exécutez ensuite, via votre navigateur, ce code : attention, ça ne marche qu'une seule fois !
Notez la "session key" ainsi générée.
Vous allez ensuite sur le lien suivant : http://www.facebook.com/login.php?api_key=APIKEYXxxxxxxxxxxxxxxxxx&connect_display=popup&v=1.0&next=http://www.facebook.com/connect/login_success.html&cancel_url=http://www.facebook.com/connect/login_failure.html&fbconnect=true&return_session=true&req_perms=read_stream,publish_stream,offline_access
Vous avez donné à votre application le droit d'écrire sur votre mur !
Vous allez ensuite sur http://www.facebook.com/apps/application.php?id=ID_OF_YOUR_APP pour ajouter votre application sur la page fan que vous administrez.
À partir de là, le cheminement du 1er article ne fonctionne plus : il faut donner à l'application le droit d'écrire sur vos pages "fans". Nous allons utiliser un outil développé par Jamie Taylor pour Zen Cart (une boutique en ligne)
Il faut télécharger et décompresser http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=1623
Vous ouvrez le fichier facebook_authorization.php et vous changez les lignes 4,5 et 6 en précisant respectivement l'id de votre application, votre clef secrète et l'URL précise où vous placez facebook_authorization.php.
Vous allez sur cette URL, et vous validez : votre application a les droits d'accès à vos pages !
Ensuite, voici le code pour écrire le message...
<?php
define('FB_APIKEY', 'API_KEY');
define('FB_SECRET', 'SECRET_KEY');
define('FB_SESSION', 'SESSION_KEY');
require_once('facebook-platform/php/facebook.php');
try {
$facebook = new Facebook(FB_APIKEY, FB_SECRET);
$facebook->api_client->session_key = FB_SESSION;
$fetch = array('friends' =>
array('pattern' => '.*',
'query' => "select uid2 from friend where uid1={$user}"));
echo $facebook->api_client->admin_setAppProperties(array('preload_fql' => json_encode($fetch)));
$message = 'Votre message';
$page_id = "ID_PAGE_FAN";
if ($facebook->api_client->stream_publish($message, $attachment, $action_links, null, $page_id))
echo "Added on FB Wall on Fan Page";
} catch (Exception $e) {
echo $e . "<br />";
}
?>
Enjoy !
PS : j'espère que Facebook ne va pas ENCORE changer leurs procédures d'autorisation, la plupart des tutos que j'ai trouvés (même des récents, comme le 1er article) sont obsolètes