IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Facebook Discussion :

Création d'un script pour facebook


Sujet :

Facebook

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Création d'un script pour facebook
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    En effet c'est pas infini, en principe, facebook limite à une publication sur un mur par utilisation de l'application (script).

    Techniquement c'est possible, en changeant un peu le contenu de la publication pour trépasser les robots, mais facebook ne tardera pas à vous bloquer vos applications, comptes...

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.
    il y a un truc que je ne comprends vu qu'il est possible de publier le même message sur plusieurs murs manuellement pourquoi ne serait il pas possible de faire la même chose avec une boucle ? quitte a fermer et réouvrir la connexion entre chaque itération de la boucle.

    Avec quels outils puis je executer un tel script ? j'ai installé le module greasemonkey pour firefox me faut il autre chose ?

    j'ai une idée de la structure du script mais je ne vois pas quelles sont les commandes a utiliser. quelqu'un peut m'aider s'il vous plait ?

    Connection a mon compte facebook
    récupération de la liste d'amis
    boucle pour chaque amis :
    - publier le lien sur le mur
    fin de la boucle
    fin du script

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    bonsoir,
    j'ai réussi a creer mon application facebook, j'ai aussi copié les fichiers necessaires sur mon hebergeur.
    lorsque je lance mon application, il pointe bien sur le fichier index.php de mon site et execute le code. je n'ai aucune erreur d'execution et je suis bien redirigé a la fin mais il n'ecrit rien sur mon mur.

    je ne comprends pas.
    voici mon fichier index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?php
    require_once 'facebook.php';
    require_once 'config.php';
    $src = new Facebook(array('appId' =>$app_id,
    'secret' => $app_secret,
    'cookie' => true,));
    $session = $src->getSession();
    $fbme = null;
    if ($session) {
        try {
            $fbme = $src->api('/me?fields=id,first_name,last_name,email');
        } catch (FacebookApiException $e) {
            error_log($e);
        }
    }
    if (!$fbme) {
        $login_url = $src->getLoginUrl(array('canvas' => 1,
        'fbconnect' => 0,
        'req_perms' => 'publish_stream,email',
        'next' => $app_canvas,
        'cancel_url' => 'http://apps.facebook.com/morfeusapp/' ));
        echo '<fb:redirect url="' . $login_url . '" />';
    }
    $user_id = $fbme[id];
    $user_first_name = $fbme[first_name];
    $token = $session[access_token];
    $message = "Message que l'utilisateur postera sur le mur";
    $link = "Lien de votre page fan associee ou le lien de l'app";
    $picture = "Url de l'image de l'app";
    $name = "Nom de l'app";
    $caption = "$user_first_name joue a l'app !";
    $description = "Description de l'app";
    $post = "message=$message&amp;access_token=$token&amp;link=$link&amp;picture=$picture&amp;name=$name&amp;caption=$caption&amp;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);
    ?>
    <html>
    <fb:redirect url="http://apps.facebook.com/morfeusapp/" />
    </html>
    Merci

  5. #5
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Tu as essayé de supprimer les amp; dans ta variable $post.

    J'ai déjà vu un problème à cause de ça sur un script récupéré sur internet.

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Oui merci c'était bien ça l'erreur le probleme c'est ke la requete ne fonctionne pas parceke mon hebergeur n'accepte pas les requete JSON.
    Je cherche un hebergeur gratuit qui est au minimum au PHP 5.2 et qui est compatible JSON.
    quelqu'un a une idée svp ?

  7. #7
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Concernant ta question pour l'hebergement gratuit, tu devrais ouvrir un nouveau sujet ici : http://www.developpez.net/forums/f85...ement/gratuit/

    En attendant, tu peux marquer ce sujet comme Résolu (Bouton en bas de page), merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script pour Facebook
    Par ColeTurner dans le forum Facebook
    Réponses: 0
    Dernier message: 10/12/2012, 14h15
  2. Création d'un script pour facebook
    Par Morfine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/01/2011, 13h15
  3. Création de script pour installer tomcat 6
    Par norten dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 08/01/2009, 11h04
  4. Script pour création répondeur auto
    Par tekpi dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 30/12/2008, 14h51
  5. [MySQL] création d'un script en tâche de fond pour mysql
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/12/2007, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo