Bonjour je ne sais pas si je suis dans la bonne catégorie mais je n'arrive pas a trouver d'aide pour créer un script permettant d'automatiser la publication d'un lien sur le mur de tous mes amis Facebook.
j'ai trouvé sur un forum un tuto permettant de créer une application facebook qui lance une requete sur le nombre d'amis et publi automatiquement sur leur mur et celui de leurs amis. mais moi je cherche quelque chose de plus simple. je veux seulement pouvoir publier sur le mur de mes amis et pouvoir changer le lien que je souhaite partager.
J'ai quelques notions en programmation mais je ne suis pas expert en Jacascript.
J'aurais aimé qu'on m'éclaire SVP
Voila ce que j'ai trouvé
Application Facebook : publier sur le mur de l’utilisateur et ceux de ses amis
Par playmobitch | Publié : 22 juillet 2010
La nouvelle API et le SDK PHP que Facebook a mis en place pour les développeurs facilitent grandement l’interaction des applications avec la plateforme.
Je ne vais pas rentrer dans les détails sur la création de l’application chez Facebook mais plutôt sur le processus de connexion de l’utilisateur et la façon d’envoyer de gentils messages d’amour sur son mur (et sur le mur de ses amis tant qu’à faire).
Première étape : le parcours du combattant
require_once '../facebook/facebook.php'; require_once 'config.php'; $facebook = new Facebook(array('appId' =>$app_id, 'secret' => $app_secret, 'cookie' => true,)); $session = $facebook->getSession(); $fbme = null; if ($session) { try { $fbme = $facebook->api('/me?fields=id,first_name,last_name,email'); } catch (FacebookApiException $e) { error_log($e); } } if (!$fbme) { $login_url = $facebook->getLoginUrl(array('canvas' => 1, 'fbconnect' => 0, 'req_perms' => 'publish_stream,email', 'next' => $app_canvas, 'cancel_url' => 'http://www.dtc.com' )); echo '<fb:redirect url="' . $login_url . '" />'; }
Facile, on commence par inclure le SDK puis un fichier de config qui contient les informations sur notre application par exemple :
$app_id = 'xxxxxxxx'; $app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx'; $app_api = 'xxxxxxxxxxxxxxxxxxxxxxxx'; $app_canvas = 'http://apps.facebook.com/mon_appli_qui_tue/';
On instancie ensuite l’objet Facebook qui va nous permettre de faire nos requêtes Graph API.
Ensuite on essaye de récupérer la session en cours si elle existe avec la fonction getSession().
Si la session existe, on récupère les infos sur l’utilisateur actuellement connecté avec méthode api() qu’on stocke dans la variable $fbme.
Cette méthode sert à interroger Big-Brother sur à peu près tout, là en l’occurrence on récupère le profil de notre ami l’internaute (avec la requête ‘/me’) et comme sa vie ne nous intéresse pas plus que ça (mais aussi pour optimiser un peu le temps de réponse) on ne demande qu’une partie de ses informations, à savoir son ID, son nom et son email.
En revanche, pour avoir accès à ces infos il faut d’abord que la personne autorise l’application (heureusement), mais les gens sur Facebook sont tellement habitués à voir ce genre de demande qu’ils ne doivent même plus prendre la peine de les lire.
De plus, maintenant les demandes d’autorisations supplémentaires (comme l’accès à l’email ou la permission de publier sur le mur) sont réunies dans une seule et même fenêtre alors que dans le temps (y’a de ça facilement 6 mois) elles s’affichaient les unes à la suite des autres, de quoi décourager Tata Michu d’accéder à l’application « Quelle star du porno es-tu ? ».
Bref, la demande d’autorisation s’effectue lignes 15-21.
Si $fbme ne contient pas les infos demandées c’est que la requête n’a pas pu être effectuée, donc que la personne n’est pas connectée à l’application.
Dans ce cas on appelle la fonction getLoginUrl qui va, comme son nom l’indique, nous retourner l’URL de connexion en lui indiquant les permissions que notre application aimerait obtenir :
'req_perms' => 'publish_stream,email'
Pour la liste des permissions c’est par là : http://developers.facebook.com/docs/...on/permissions
Les paramètres ‘next’ et ‘ cancel_url’ permettent respectivement de spécifier l’url à atteindre après une authentification réussie et après une annulation de la part de l’utilisateur.
Y’a plus qu’à renvoyer la personne sur cette page de login, si tout va bien elle autorise l’application à accéder à son profil et donne son accord pour les permissions supplémentaires.
On redirige avec le tag FBML qui va bien :
1 2
|
echo '<fb:redirect url="' . $login_url . '" />'; |
Ouf, c’est tout bon Jacques, notre application a accès au profil et on peu publier des trucs utiles (ou pas) sur le mur du coco.
Deuxième étape : balancer la sauce
Le plus dur est fait, maintenant on peut facilement publier sur le mur de notre copain, appelons-le Rémi pour plus de facilité.
Histoire de signaler aux amis de Rémi que ce dernier vient d’essayer notre application-de-la-mort-qui-tue on va publier sur son mur.
$user_id = $fbme[id]; $user_first_name = $fbme[first_name]; $token = $session[access_token]; $message = "Trop kikoo lol cette application !"; $link = $app_canvas; $picture = "http://techbee.files.wordpress.com/2007/10/martine-perd-son-temps-sur-facebook.jpg"; $name = "Application de la mort qui tue"; $caption = "$user_first_name vient de s'éclater la rate, pourquoi pas toi ?"; $description = "Viendez tous !"; $post = "message=$message&access_token=$token&link=$link&picture=$picture&name=$name&caption=$caption&description=$description"; $curl = curl_init("https://graph.facebook.com/me/feed"); curl_setopt($curl,CURLOPT_POST, true); curl_setopt($curl,CURLOPT_POSTFIELDS,$post); curl_exec($curl); curl_close($curl);
Rien de bien sorcier, pour publier sur le mur il faut donc faire une requête POST sur l’URL https://graph.facebook.com/me/feed en renseignant les champs qui vont bien, sans oublier le access_token qu’on récupère dans la session.
Rémi aura la joie de découvrir notre message sur son profil, certainement noyé dans la masse d’informations toutes plus utiles les unes que les autres qui jonchent son mur.
Dernière étape : la cerise sur le gâteau
Jusqu’à maintenant notre application est plutôt gentillette, on va essayer d’abuser un peu.
Quitte à publier quelque chose, autant le faire sur le mur de chacun des amis de Rémi.
Pour ça, Graph API nous simplifie la vie.
$friends = $facebook->api('/me/friends?fields=id'); if(!empty($friends)){ foreach ($friends[data] as $friend) { $curl = curl_init("https://graph.facebook.com/".$friend[id]."/feed"); curl_setopt($curl,CURLOPT_POST, true); curl_setopt($curl,CURLOPT_POSTFIELDS,$post); curl_exec($curl); curl_close($curl); } }
La requête sur ‘/me/friends?fields=id’ nous permet d’obtenir la liste des amis de Rémi.
Histoire de ne pas avoir de timeout, et parce que on se fiche de leur profil complet dans cet exemple, on ne demande que les ID de ces amis en précisant ‘fields=id’.
Le problème est que si Rémi à une liste d’ami conséquente, même en ne demandant que les ID, notre application va ramer comme une folle et finir par planter comme une loutre.
Pour éviter ça, on peut utiliser le système de paging pour naviguer dans les résultats ou demander à l’api de nous retourner seulement x résultats (‘/me/friends?fields=id&limit=x’)
…ou pas…
Pour éviter de bloquer tout le bousin, on peut aussi feinter et externaliser cette boucle qui prends des plombes avec Rémi.
En gros la page principale de l’application (index.php) gère l’authentification et stocke les ID des copains à Rémi dans un tableau.
On passe ensuite ce tableau à un deuxième fichier, genre spam_my_friends.php, qu’on appellera en Ajax, ce qui donnerait :
$friends = $facebook->api('/me/friends?fields=id'); if(!empty($friends)){ foreach ($friends[data] as $friend) { $tab_friends[] = $friend[id]; } $list_friends = implode(',', $tab_friends); }
Dans le corps de la page, on utilise FBJS pour faire un appel en Ajax :
<script type="text/javascript"> <!-- var ajax = new Ajax(); var params={"token":'<?=$token;?>',"friends":'<?=$list_friends?>'}; ajax.post('http://www.mon-site-qui-tue.com/spam_my_friends.php',params); //--></script>
Le contenu de spam_my_friends.php pourrait être :
if(!empty($_POST['token']) && !empty($_POST['friends'])) { $token = $_POST['token']; $friends = $_POST['friends']; $tab_friends = explode(',',$friends); if(is_array($tab_friends)){ $message = "xxxxxxxx"; $link = $app_canvas; $picture = "http://techbee.files.wordpress.com/2007/10/martine-perd-son-temps-sur-facebook.jpg"; $name = "xxxxxx"; $caption = "xxxxxxx"; $description = "xxxxx"; $post = "message=$message&access_token=$token&link=$link&picture=$picture&name=$name&caption=$caption&description=$description"; foreach($tab_friends as $friend_id){ $curl = curl_init("https://graph.facebook.com/".$friend_id."/feed"); curl_setopt($curl,CURLOPT_POST, true); curl_setopt($curl,CURLOPT_POSTFIELDS,$post); curl_exec($curl); curl_close($curl); } } }
Et voilà comment pourrir le mur de Rémi, le mur de ses amis et avec un peu de chance, le mur des amis de ses amis…
Bon, en fait ce n’est pas si simple, Facebook n’autorise pas un nombre infini de requêtes de ce genre, mais ça peut être utile pour lancer une application, à condition de ne pas en abuser.
Partager