[AUTOMATIQUE] Cet article a plus de 5 ans.
Il se peut donc que les informations qu'il fournit ne soient plus totalement exactes.

Grâce à l’API Twitter, vous pouvez très simplement récupérer le nombre de followers d’un compte donné. L’API Twitter ne permet pas un nombre de requêtes illimités, c’est pourquoi il est nécessaire de stocker temporairement le résultat d’une requête grâce au cache WordPress (un stockage temporaire d’une information en base de donnée).

L’ancienne méthode

Il y a encore peu, il était possible d’utiliser l’API publique V1 très simplement comme ceci :

function twitter_followers_count($nom_twitter){
    $data = file_get_contents("https://cdn.api.twitter.com/1/users/lookup.json?screen_name=" . $nom_twitter);
    $data = json_decode($data, true);
    $data = $data[0][followers_count];
    return $data;
}

Malheureusement, cette API n’est plus disponible et a été remplacée par l’API V1.1 qui n’autorise plus les requêtes anonymes.

Nous allons donc devoir authentifier notre requête et, pour éviter de consulter l’API Twitter à chaque chargement de page. Pour ce faire, nous allons utiliser une fonction capable de stocker temporairement le résultat de la requête en base. De cette manière, l’application Twitter ne sera solicité qu’une fois par heure afin de mettre à jour le compteur, vous préserverez ainsi votre quota de requêtes et éviterez les messages d’erreur.

 

Créer une application Twitter

Il vous faudra donc posséder un compte Twitter et créer un application pour récupérer une clé secrète ainsi qu’un identifiant utilisateur.

creat_twitter_app

 

Voici les champs qu’il vous faudra remplir pour obtenir les identifiants demandés.

creat_twitter_app_details

 

La fonction

Une fois que vous avez bien créé votre application, il ne vous reste plus qu’à coller cette fonction dans le fichier functions.php de votre thème .

N’oubliez pas de remplacer les XXXXXXX par les clés de votre nouvelle application (évidemment).

function twitter_followers_count($screenName = 'google') {
    // déclaration des variables
    $consumerKey = 'XXXXXXXXXXXXXXXXXXX';
    $consumerSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    $token = get_option('cfTwitterToken');
 
    // On consulte le cache
    $numberOfFollowers = get_transient('cfTwitterFollowers');
 
    // Si le cache n'existe pas (ou plus)
    if (false === $numberOfFollowers) {
        // reconnexion à l'API si elle est expirée
        if(!$token) {
            // préparation de l'authentification à partir des clés
            $credentials = $consumerKey . ':' . $consumerSecret;
            $toSend = base64_encode($credentials);
 
            // Préparation de le requête HTTP
            $args = array(
                'method' => 'POST',
                'httpversion' => '1.1',
                'blocking' => true,
                'headers' => array(
                    'Authorization' => 'Basic ' . $toSend,
                    'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8'
                ),
                'body' => array( 'grant_type' => 'client_credentials' )
            );
 
            add_filter('https_ssl_verify', '__return_false');
            $response = wp_remote_post('https://api.twitter.com/oauth2/token', $args);
 
            // récupération de la réponse et décodage du format json
            $keys = json_decode(wp_remote_retrieve_body($response));
 
            if($keys) {
                // sauvegarde du token de la réponse en base
                update_option('cfTwitterToken', $keys->access_token);
                $token = $keys->access_token;
            }
        }
        // on a donc le token soit via l'API soit via la requête en base selon son état
        $args = array(
            'httpversion' => '1.1',
            'blocking' => true,
            'headers' => array(
                'Authorization' => "Bearer $token"
            )
        );
 
        add_filter('https_ssl_verify', '__return_false');
        $api_url = "https://api.twitter.com/1.1/users/show.json?screen_name=$screenName";
        $response = wp_remote_get($api_url, $args);
 
        // Si pas d'erreur et valeur absente on récupère la nouvelle valeur via l'API
        if (!is_wp_error($response)) {
            $followers = json_decode(wp_remote_retrieve_body($response));
            $numberOfFollowers = $followers->followers_count;
        } else {
        // Sinon on récupère la valeur stockée
            $numberOfFollowers = get_option('cfNumberOfFollowers');
        }
 
        // On enregistre la valeur en cache pour une durée d'une heure (c'est en seconde, donc vous pouvez facilement augmenter le temps de ce cache).
        set_transient('cfTwitterFollowers', $numberOfFollowers, 1*60*60);
        update_option('cfNumberOfFollowers', $numberOfFollowers);
    }
 
    return $numberOfFollowers;
}

 

Une fois que votre fonction est en place, il vous suffit de l’appeler comme suit :

echo twitter_followers_count('google');

Dans ce cas ‘google’ est le nom du compte dont on veut remonter le compteur, c’est également le compte consulté par défaut par la fonction, vous pouvez évidemment le changer.

A noter qu’avec cette méthode de cache, le chargement de la page ne sera pas bloqué durant la consultation de l’API puisque cette dernière ne sera sollicitée que toutes les heures (selon la durée du transient). Si vous utilisez un système de cache, je vous conseille d’appeler la fonction twitter_followers_count en AJAX.

Source

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *