Tag Archives: facebook

Premiers pas avec le Facebook Javascript SDK

J’ai récemment commencé à utiliser le framework Javascript SDK Facebook, qui assure une couche Javascript d’authentification et d’utilisation de l’API Facebook. Mon but à terme est de porter l’application que je développe, actuellement sous forme canvas/fbml/fbjs sous forme d’iframe/javascript sdk.

Alors, à base de jquery pour quelques appels Ajax, avec un soupçon de symfony sans ORM (mais pas réellement nécessaire sur le coup, limite j’ai perdu du temps à le mettre en place tout bien vu qu’il n’y a qu’une page), j’ai designé une page que je qualifierai de console de test Facebook, disponible sur http://fb.mkz.me/ et également sur http://apps.facebook.com/monkeyzfb/ dans sa version iframe. La console permet de tester certains appels issus de FB.api (graph et old rest), quelques appels FB.ui et quelques socials plugins.

Le code, quant à lui est très simple. Tout commence par quelques éléments html, un petit script javascript utilisant jquery, deux appels ajax, l’un pour changer le code et l’autre pour executer la commande FQL désirée.

Et hop, ça donne ça:

On notera les deux petits tricks suivants:

Pour savoir si la session facebook a été déconnectée, 3 lignes de codes suffisent. Au besoin, on pourra changer le document.location pour délogguer l’utilisateur de notre application:

    FB.Event.subscribe('auth.sessionChange', function(response) {
        if (response.session) {
            FB.api('/me', function(response) { $('span#_status').text('Logged in as ' + response.name);});
        } else {
            $('span#_status').text('No session');
        }
    });

Et encore l’appel à FB.XFBML.parse() pour reparser manuellement toute la page après l’inclusion de nouveaux éléments xfbml (fb:comments, fb:profile-pic):

    $('input#_run').click(function() {
        // On modifie une section cachée (_code) avec le code ecrit dans le textarea
        $('span#_code').html($('textarea#_editor').val());
        // On vide le result car le script va ecrire dedans
        $('span#_result').html('');

        // On parse le xfbml pour le voir s'afficher:
        FB.XFBML.parse();
    });

Premiers pas pour créer une application Facebook Connect avec Symfony

Ce tutoriel va vous expliquer comment créer une application très simple Facebook Connect, en gérant le fait d’être loggué sur Facebook ou pas, qui va nous permettre de faire des appels sur l’API Graph et utilisant le Javascript SDK.

Je passe très rapidement sur la création de l’application symfony. Il y a déjà des tas de tutoriaux pour cela, je vous conseille de reprendre les tutoriaux, en particulier celui de Jobeet.

On crée donc l’application (sans ORM dans mon cas):

cd devel/
mkdir -p sfbook/lib/vendor
curl http://www.symfony-project.org/get/symfony-1.4.8.tgz | tar -xzv -C !-1:2 -f -
SFBOOK=$(pwd)/sfbook; cd $SFBOOK; ./lib/vendor/symfony-1.4.8/data/bin/symfony generate:project sfbook --orm=none

Puis on récupère le php-sdk Facebook et on l’on active facebook dans l’autoloader:

cd lib/vendor ; git clone https://github.com/facebook/php-sdk.git
cat > $SFBOOK/config/autoload.yml << EOF
autoload:
    facebook:
        name: facebook
        path: %SF_LIB_DIR%/vendor/php-sdk/src
        recursive: off
EOF

On crée une application, ‘frontend’ et deux modules dans celle ci ‘default’ et ‘home’. Le premier module servira pour se logger, le 2nd pour l’application en elle même et dans notre exemple, on récupèrera juste la liste de ses amis.

php symfony generate:app frontend
php symfony generate:module frontend home
php symfony generate:module frontend default

Le module « home » ne sera accessible qu’aux utilisateurs authentifiés sur facebook. On le protège donc:

mkdir apps/frontend/modules/home/config
cat >> apps/frontend/modules/home/config/security.yml << EOF
all:
    is_secure: true
EOF

Et on oublie pas de modifier apps/frontend/config/settings.yml en rajoutant dans la section all: l’action suivantes:

 .actions:
    login_module
:          default
    login_action
:          login

A ce moment, on crée l’application sur facebook. On définit uniquement le Site URL (Onglet Website) pour accéder à notre application symfony et on note nos application Id, api key et application secret.

Comment ça va marcher ? On va mettre dans le layout général le code « connect »: Un script javascript facebook va être chargé et nous redirigera directement sur la page de login si jamais la session facebook venait à être fermée par l’utilisateur. Le template default/login contiendra le bouton facebook connect, et le template home/index qui ne s’affichera que si la session

On ajoute dans apps/frontend/template/layout.php le code suivant dans le :

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({appId: '[APP_ID]', status: true, cookie: true, xfbml: true});
  FB.Event.subscribe('auth.sessionChange', function(response) {
    if (response.session) {
        window.location = '<?php echo url_for('home/index'); ?>';
    } else {
        window.location = '<?php echo url_for('default/login'); ?>';
    }
  });
</script>

Le module « default » n’aura que l’action « login ». Cette action s’occupe d’authentifier l’utilisateur. Si l’utilisateur est loggué sur facebook, alors on le redirige vers home/index. Voilà le code de apps/frontend/default/actions/actions.class.php:

<?php
class defaultActions extends sfActions
{
    public function executeLogin(sfWebRequest $request)
    {
        $facebook = new Facebook(array('appId' => '[APP_ID]',
                                       'secret' => '[APP_SECRET]',
                                       'cookie' => TRUE ));
        $session = $facebook->getSession();

        if(NULL !== $session)
        {
            $me = $facebook->api('/me', 'GET', array('access_token' => $session['access_token']));

            // On verifie qu'on existe.
            if(NULL !== $me)
            {
                $this->getContext()->getUser()->setAuthenticated(true);
                $this->redirect('home/index');
            }
        }

        $this->getContext()->getUser()->setAuthenticated(false);

        return sfView::SUCCESS;
    }
}

Le template et default/login contiendra uniquement le bouton facebook connect:

<div id='content' align='center'>
<h1>Welcome !</h1>
<fb:login-button></fb:login-button>
</div>

Dans home, on va mettre un peu ce que l’on veut. Pour le coup, on va par exemple récupérer et afficher ses amis facebook:

<?php
class homeActions extends sfActions
{
    public function preExecute()
    {
        $this->facebook = new Facebook(array('appId' => '[APP_ID]',
                                             'secret' => '[APP_SECRET]',
                                             'cookie' => TRUE ));
        $this->session = $this->facebook->getSession();
    }

    public function executeIndex(sfWebRequest $request)
    {
        $this->friends = $this->facebook->api('/me/friends',
                                              'GET',
                                              array('access_token' => $this->session['access_token']));

        return sfView::SUCCESS;
    }
}

Le template associé est très simple:

My friends:<br />
<br />
<?php foreach($friends['data'] as $friend) : ?>
<?php echo $friend['name'] . "<br />"; ?>
<?php endforeach; ?>

Et voilà. Si en visitant le site on est déjà loggué facebook, mais que l’utilisateur n’a jamais utilisé l’application, on aura le droit à l’écran de login pour installer l’application. Ensuite, l’application affichera directement home/index.

On pourra même rajouter un bouton « logout » dans le layout global:

<?php if($sf_user->isAuthenticated()) : ?>
<input type='button' onclick='FB.logout(function(response) {});' value='logout' />
<?php endif ; ?>

Créer une application facebook offline en utilisant l’api graph et le php-sdk, partie 2

Dans mon précédent article (Créer une application facebook offline en utilisant l’api graph et le php-sdk), je vous montrais comment initier une connexion via oauth à Facebook et utiliser très brièvement l’API Graph en utilisant le php-sdk.

Je vais maintenant revenir sur l’API pour y faire des appels plus complexes (lecture/écriture, appels aux anciennes fonctions de l’API REST, et finalement une introduction au langage de requête FQL.

Repartons de notre script fetch.php. Si vous avez tout suivi, nous avions récupéré à la fin du premier article un access_token offline pour notre compte nous permettant de faire n’importe quel appel à facebook sans avoir à utiliser de navigateur web. Nous allons le réutiliser maintenant. Cependant, cela est totalement optionnel et nous pourrions également utiliser le token fournit par la session facebook (qui est fournit à la connexion et dont nous faisons l’utilisation dans le script online index.php).

Appels en lecture à l’API Graph

Comme nous l’avons vu à la fin du premier article, il nous était possible de faire des requêtes simples. La plus simple qui soit est un appel à /me:

$facebook = new Facebook(array(
                            'appId' => $app_id,
                            'secret' => $secret_key
                        ));

$params = array(
            'access_token' =>  $access_token
          );

$res = $facebook->api( '/me', 'GET', $params );
print_r($res);

De la même façon, on pourra récupérer ses contacts en faisant un appel à ‘/me/friends’:

$res = $facebook->api( '/me/friends', 'GET', $params );

Imaginons maintenant qu’on veuille récupérer le status d’un de ses amis. Il suffit remplacer ‘me’ par l’id du contact en question, et au lieu d’appeler ‘friends’, le ‘status:

$res = $facebook->api( '/.. id du contact ../status', 'GET', $params );

Cependant, les permissions demandées précédemment (« offline_access » et « read_stream ») ne suffisent pas pour faire cet appel. Il existe un certain nombre de permissions étendues devant être demandées à l’utilisateur avant que l’application puisse avoir accès aux données. Ces permissions sont détaillées sur la page Extended Permissions de l’API. On notera qu’il faut des permissions différentes pour obtenir des informations personnelles relative à soit que des informations relative aux contacts. Ici, nous avons besoin de « friends_statuses » afin d’obtenir les status de ses amis. Pour rajouter une permission, il faudra modifier le script index.php qu’on a utilisé pour générer un access_token, pour générer un nouveau lien pour faire la demande sur Facebook.

On notera qu’il est possible de faire des appels à l’API pour la récupération de données publiques, et ce sans access_token valide (par exemple, l’appel à ‘/patrick.marie’ est possible par n’importe qui sans access_token valide).

Appels en écriture à l’API Graph

L’api graph facebook permet également de publier des données sur Facebook (status, commentaires, images, liens, évènements…). Les appels possibles sont décrits dans le paragraphe Publishing to Facebook de la référence de l’API. Les appels ne sont que très peu différents de l’appel en lecture seule.

Voici un exemple simple pour changer son status:

$params['message'] = 'Coucou';
$res = $facebook->api( '/me/feed', 'POST', $params );

On notera que pour cet appel il faudra obtenir la permission ‘publish_stream’. A partir de là, on pourra faire une recherche pour trouver des éléments à « liker »:

Selon la doc à propos des requètes de recherche (http://developers.facebook.com/docs/api#search), il faut juste faire une requète sur https://graph.facebook.com/search?q=QUERY&type=OBJECT_TYPE avec comme type possible ‘post’, ‘user’, ‘page’, ‘event’, ‘group’ ou ‘checkin’.

Faisons un rapide test. Je cherche une page sur les gauffres en forme de Texas:

$params = array('access_token' =>  $access_token, 'type' => 'page', 'q' => 'texas waffles' );
$res = $facebook->api( '/search', 'GET', $params );
foreach($res['data'] as $page)
{
    print $page['id'] . ' -> ' . $page['name'] . "\n";
}

Maintenant, je vais chercher le ‘Coucou’ que j’ai posté précédemment pour le ‘liker’. Pour faire une recherche sur son feed, un appel à /me/home avec le paramètre ‘q’ suffit. Ensuite, un appel à /POST_ID/likes permettra de le liker:

$params = array('access_token' =>  $access_token, 'type' => 'post', 'q' => 'Coucou mon api' );
$res = $facebook->api( '/me/home', 'GET', $params );
foreach($res['data'] as $post)
{
    if($post['from']['id'] == $me['id'])
    {
        print $post['message'] . "\n";

        $params = array('access_token' =>  $access_token);
    // like ...
        $rep = $facebook->api( '/' . $post['id'] . '/likes', POST, $params );
    }
}

Il est finalement possible d’effacer le like posé ou encore le post en question, grâce à la méthode DELETE ( http://developers.facebook.com/docs/api#deleting ):

// Effacer le like:
$rep = $facebook->api('/' . $postid . '/likes', DELETE, $params );
// Effacer le post:
$rep = $facebook->api('/' . $postid, DELETE, $params);

On notera qu’il n’est pas encore possible de poster ou de ‘liker’ n’importe quoi ou n’importe où. J’en ai fais les frais quand je voulais liker automatiquement la page des gauffres ;-(

Utilisation des fonctions de l’API REST

Avant l’apparition en Mai de l’API Graph, il existait une autre API basée sur REST qui est encore maintenue aujourd’hui. Cette API est encore décrite sur le site de facebook. (http://developers.facebook.com/docs/reference/rest/). Il est intéressant de parler de cette API car même si elle semble être désuète par rapport à l’API Graph, je la trouve toujours indispensable grâce à tous les appels non encore supporté par la nouvelle API, comme par exemple les requêtes FQL que nous verrons dans le paragraphe final.

On fait appel à ces fonctions toujours grâce à la fonction api() de l’api, mais de façon légèrement différente:

$request = array(
            'method' => 'friends.get',
            'access_token' => $access_token
            );

$res = $facebook->api($request);
// ...
// ou encore, en utilisant users.getInfo (http://developers.facebook.com/docs/reference/rest/users.getInfo):
$request = array(
            'method' => 'users.getInfo',
            'uids' => '4',
            'fields' => 'first_name, last_name',
            'access_token' => $access_token
            );
$res = $facebook->api($request);
var_dump($res);
/*
array(1) {
  [0]=>
  array(3) {
    ["first_name"]=>
    string(4) "Mark"
    ["last_name"]=>
    string(10) "Zuckerberg"
    ["uid"]=>
    string(1) "4"
  }
}
*/

Merci Mark pour cette rapide participation à la démo !

Mais la principale utilisation que je vois de cette ancienne API est encore l’utilisation de la méthode fql.query.

Utilisation de l’API FQL

Un mécanisme puissant de facebook est l’utilisation du Facebook Query Language. En quelques mots, les tables FQL permettent d’accéder aux données facebook auxquelles on a accès comme si l’on tappait dans une base de données en langage SQL.

Il y a dans Facebook un grand nombre de tables accessibles: les utilisateurs, les groupes, pages, amis, etc…

Lançons quelques requêtes prises au hasard dans l’API:

$query = 'SELECT uid, name FROM user WHERE uid = me()';
$request = array(
            'method' => 'fql.query',
            'query' => $query,
            'access_token' => $access_token);
$res = $facebook->api( $request );
if(count($res))
{
    $uid = $res[0]['uid'];
    $name = $res[0]['name'];
    echo "My name is " . $name . " (#" . $uid . ")\n";
}
// Retourne:
// My name is Patrick Marie (#615214609)

On pourra se balader dans les exemples proposés. Un autre sera de récupérer les derniers status de ses contacts, ou encore les derniers posts de sa page:

$ts = time() - (7 * 24 * 60 * 60);
$r = fql($access_token, 'SELECT uid,status_id,message FROM status WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=' . $uid . ') AND time > ' . $ts . ';');
/* ... */

$r = fql($access_token, 'SELECT message FROM stream WHERE source_id = ' . $uid);
/* ... */

Voilà, c’est la fin de cette courte présentation de l’API, sachant que même si la documentation semble exhaustive maintenant, ce ne fut pas toujours le cas et qu’elle m’a donné quelques fois pas mal de travail pour comprendre le pourquoi du comment.

Créer une application facebook offline en utilisant l’api graph et le php-sdk

Mon but: Créer une application php pouvant pooler des informations sur un compte facebook sans que la personne en question ne soit forcement connectée à ce moment là.

Outils: Mon serveur web, l’api graph facebook et son php-sdk (http://github.com/facebook/php-sdk).

Initialement, je voulais faire un tutoriel sur l’intégration et l’utilisation de ce sdk avec symfony, mais cela aurait été un poil trop long et sans réel intérèt.

Avant toute chose, il ne faut pas oublier de créer une application facebook (facebook.com/developers), de noter son id, la clef api et la clef secrète, et de récupérer le php-sdk (hint: ‘git clone http://github.com/facebook/php-sdk.git’).

Vue la nature de l’application (type « connect », oauth et utilisation du sdk), quelques modifications sont à effectuer dans les settings:
Dans Connexion, spécifier l’URL connect (qui pointera vers l’endroit où vous allez mettre votre index.php), et activez « Canvas Session Parameter » et « OAuth 2.0 for Canvas (beta) » dans l’onglet Migrations.

La démo va comporter 2 parties: Une partie web (index.php), nécessaire pour enregistrer les utilisateurs dans l’application, les authentifier et récupérer le token d’accès, et une seconde, totalement « offline » qui permettra de récupérer les données dans facebook sans intervention tierce (fetch.php).

Le workflow d’enregistrement de l’utilisateur, de l’ajout des permissions et de la création de l’access token offline est le suivant:

⇀ L’utilisateur se pointe sur notre index.php, on lui affiche un lien pour se logger sur facebook ou pour ajouter l’application, qu’il doit cliquer;
⇀ En cliquant, il se retrouve sur facebook, se loggue si besoin, autorise l’application;
⇀ Il revient sur notre page, et nous lui demandons qu’il retourne sur facebook pour qu’il nous autorise à utiliser le mode offline et certaines autres permissions;
⇀ Facebook redirige l’utilisateur vers notre script, avec un paramètre « code »;
⇀ Nous effectuons une requète secrète avec le code donné et notre clef secrete vers facebook, pour récupérer le token illimité, que l’on sauvegarde précieusement.

Ces étapes peuvent être simplifiées (à base de Location: ), mais j’ai préféré bien distinguer les différentes étapes pour que ça soit clair (pour vous comme pour moi, plus tard).

Le premier script que je propose est plus simple que celui d’exemple proposé par le SDK de facebook. Il s’appelle donc index.php, sera le script par défaut dans mon répertoire web:

<?php

require_once 'php-sdk/src/facebook.php';

// Le script a besoin de connaitre un minimum d'information sur l'application facebook.
// On donne donc son ID et ses clefs d'utilisation:
$app_id = '... application id ...';
$api_key = '... la clef API ...';
$secret_key = '... la clef secrète ...';

// Construit une interface facebook avec les infos de notre application
// Noter qu'il est obligatoire d'avoir les extensions PHP json et curl.
$facebook = new Facebook(array(
                            'appId' => $app_id,
                            'secret' => $secret_key,
                            'cookie' => true
                        ));

// Recupere la session
// Si celle ci n'est pas valide, aucune interaction avec fb ne sera possible
$session = $facebook->getSession();

if($session)
{
    try {
        // On appelle l'API graph, ici graph.facebook.com/me
        // /me contient le nom de l'utilisateur mais aussi son ID facebook.
        $me = $facebook->api('/me');
    }
    catch(FacebookApiException $e) {
    }
}

// Si aucune session n'est detectee, alors on affiche un lien de login.
if( ! $session || ! $me )
{
    $loginUrl = $facebook->getLoginUrl();
    echo '<a href=' . $loginUrl . '>login</a>';
}
else
{
    $logoutUrl = $facebook->getLogoutUrl();
    // On pourrait dumper le résultat de l'appel à /me.
    echo 'Mon nom est ' . $me['name'] . '.';
    echo '<br />';
    echo '<a href=' . $logoutUrl . '>logout</a><br />';
}

Ensuite, pour effectuer des requêtes offline, il faut demander l’autorisation de l’utilisateur. Un appel à l’api Oauth 2.0 de facebook est ici nécessaire (voir http://developers.facebook.com/docs/api#authorization).

Pour ce faire, on rajoute donc une fonction « buildOAuthPermissionLink » et son lien prêt à être utilisé:

function buildOAuthPermissionLink()
{
    global $app_id;

    $my_site = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];

    $fb_link = 'https://graph.facebook.com/oauth/authorize?';
    $fb_link.= 'client_id=' . $app_id;
    $fb_link.= '&redirect_uri=' . $my_site;
    $fb_link.= '&scope=' . 'offline_access,read_stream';

    return $fb_link;
}
/* ... */
    echo 'Mon nom est ' . $me['name'] . '.';
    echo '<br />';
    echo 'Ask for permissions: <a href="' . buildOAuthPermissionLink() . '">click</a> ';
    echo '<br />';

Dès lors qu’on cliquera sur ce lien, on sera redirigé vers facebook qui, après avoir obtenu l’autorisation de l’utilisateur de partager les données, nous enverra un code qu’on pourra utiliser pour l’échanger contre un access_token spécifique de durée illimité. Cette fois-ci, c’est à nous de faire la requète:

if( isset($_REQUEST['code']) )
{
    $my_site = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];

    $fb_link = 'https://graph.facebook.com/oauth/access_token?';
    $fb_link.= 'client_id=' . $app_id;
    $fb_link.= '&redirect_uri=' . $my_site;
    $fb_link.= '&client_secret=' . $secret_key;
    $fb_link.= '&code=' . $_REQUEST['code'];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $fb_link);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    $ans = curl_exec($ch);
    curl_close($ch);

    list($field, $value) = explode('=', $ans);
    if($field == 'access_token')
    {
        echo "Access token is '" . $value . "'<br />";
    }
}

Le token donné sera la clef de voute des appels effectués en mode offline. Il faut la conserver précieusement.
On va créer un 2nd script qui effectuera les appels en mode déconnecté. On l’appelle ‘fetch.php‘:

<?php

require_once 'php-sdk/src/facebook.php';

// De meme pour index.php, on a besoin des elements d'informations de l'applicaiton:
$app_id = '... l application id ...';
$api_key = '... la clef API ...';
$secret_key = '... la clef secrète ...';

// On cree l'objet:
$facebook = new Facebook(array(
                            'appId' => $app_id,
                            'secret' => $secret_key,
                            // Pas de cookie ... On est en mode offline, on donnera l'access token apres.
                        ));

// On fait un appel public, sans clef (ceci est l'url customisable)
$res = $facebook->api( '/patrick.marie' );
print_r($res);

// Ici le token qu'on a precieusement conservé suite à la fin de l'authentification OAuth
$access_token = '... l access token que l on a récupéré ...';

// On prepare un appel à /me. On a besoin de donner l'access token:
$params = array(
            'access_token' =>  $access_token
          );

$res = $facebook->api( '/me', 'GET', $params );
print_r($res);

// Dans l'index.php, j'ai demandé l'autorisation 'read_stream'. On va l'exploiter
// pour récupérer les derniers éléments de mon wall:
$wall = $facebook->api( '/me/feed', 'GET', $params );
print_r($wall);

// Ou ceux de mes amis:
$home = $facebook->api( '/me/home', 'GET', $params );
print_r($home);

Et voilà, cela clot cette première partie. Dans une seconde, je reviendrai sur les différents appels possibles au php-sdk, sur les POST possibles, les fonctions legacy et les requètes FQL.

Facebook, Cookies et bouton « Like »

Partons d’un constat simple: Lors d’une requête http sur un serveur web, votre navigateur envoie tous les cookies déjà reçus correspondant à ce domaine s’ils existent et n’ont pas expirés. Donc, si je vais une première fois sur google.fr, je recevrai des cookies, cookies que je renverrai lors d’une seconde requête. Jusque là, tout va bien.

Les cookies servent entre autres au site web à vous identifier. Par exemple, si vous vous authentifier sur un site (login/password), vous recevrez un cookie permettant à garder votre session ouverte.

A ce jour, beaucoup de sites utilisent des systèmes de tracking afin d’établir des statistiques sur le nombre de visiteurs, leurs habitudes et leur façon de naviguer. Google Analytics en est un bon exemple. Quand un site tierce veut controler les visites et habitudes de ses visiteurs, on installe 3 lignes de javascript et hop, l’utilisateur se retrouve tracké par les cookies. Rien de bien scandaleux, c’est le but avoué, ça ne choque pas beaucoup de monde.

Il y a deux semaines, Facebook, dont on sait déjà qu’il stocke toute l’activité des utilisateurs sur son site, vient de proposer une nouvelle API d’utilisation simplifiée de widgets aux éditeurs des autres sites. L’un des nouveaux plugins proposés est ce bouton « like », dont on sait qu’il cartonne (50000 sites ont ajoutés le bouton « like » à peine une semaine après sa mise à disposition du public) permet juste d’inclure un petit bouton innocent sur ses pages pour permettre aux visiteurs finaux de partager à ses amis facebook tel ou tel article, objet, etc.

Là où ça devient dangeureux, c’est que ce simple bouton oblige votre navigateur à faire une requête internet sur la plateforme Facebook. Et que cette simple requête envoie donc tous les cookies relatifs à votre session Facebook (voir exemple sur marianne2.fr)… et qui dit cookie, dit tracking. Pour peu que vous ayez un compte, non seulement ils ont à la disposition toutes les informations que vous avez laissé dans le site, mais à partir de maintenant, un historique complet de vos visites sur les autres sites sur lesquels ce bouton (ou tout autre widget) est présent…

Je ne suis pas un farouche défenseur de la protection de la vie privée, mais même si je n’ai aucune objection sur le tracking de mon activité sur le web
par google (par mes recherches et mes visites de sites qu’ils connaissent, fatalement), je suis un peu opposé sur l’utilisation de ces données par Facebook
à cause entre autre de l’oppacité et des conditions d’utilisations de plus en plus douteuses des données personnelles. De ce fait, pour la première fois, j’ai juste rajouté un filtre (« http://www.facebook.com/plugins/like.php?* ») dans Adblock Plus et ait invité d’autres à en faire de même.