#271 La vraie solution pour récupérer ses abonnés Twitter, Facebook ou RSS.

Le but de ce tutoriel est simple, pouvoir récupérer le nombre de ses abonnés sur Twitter , FaceBook et  de son flux RSS. Vous pourrez ensuite les intégrer comme bon vous semble sur votre site, sans utiliser de plugin ou l’affreux bouton FeedBurner. Voici la solution enfin révélée.

  • Le cas Twitter.

Pour afficher le nombre d’abonnés de votre compte twitter vous pouvez utiliser le plugin suivant : TwitterCounter qui affiche un bouton (type FeedBurner) avec le nombre d’abonnés.

La solution que nous allons mettre en place n’utilise pas plugin.

Normalement, cette fonction nécessite aucune configuration avancée sur votre serveur et devrait fonctionner sans problème.
Elle se présente sous la forme d’une fonction à coller dans le fichier « functions.php » de votre thème . Par la suite, nous pouvons appeler cette fonction pour afficher le nombre d’abonné(e)s n’importe où.

[code lang= »php »]//Mes followers twitter
function string_getInsertedString($long_string,$short_string,$is_html=false){
if($short_string>=strlen($long_string))return false;
$insertion_length=strlen($long_string)-strlen($short_string);
for($i=0;$i<strlen($short_string);++$i){
if($long_string[$i]!=$short_string[$i])break;}
$inserted_string=substr($long_string,$i,$insertion_length);
if($is_html && $inserted_string[$insertion_length-1]==’<’){
$inserted_string=’<’.substr($inserted_string,0,$insertion_length-1);}
return $inserted_string;}
function DOMElement_getOuterHTML($document,$element){
$html=$document->saveHTML();
$element->parentNode->removeChild($element);
$html2=$document->saveHTML();
return string_getInsertedString($html,$html2,true);}
function getFollowers($username){
$x = file_get_contents("http://twitter.com/".$username);
$doc = new DomDocument;
@$doc->loadHTML($x);
$ele = $doc->getElementById(‘follower_count’);
$innerHTML=preg_replace(‘/^<[^>]*>(.*)<[^>]*>$/’,"\\1",DOMElement_getOuterHTML($doc,$ele));
return $innerHTML;
}[/highlight]

Editer le fichier function.php de votre thème, pour cela allez dans votre répertoire wordpress/wp-content/theme/(nom-du-theme).

Rajouter cette fonction en fin de fichier, n’hésiter pas à la commenter. Pour mettre un commentaire utiliser cette syntaxe // .

Le code suivant est à placer là où vous souhaitez voir apparaitre le nombre d’abonné(e)s du compte Twitter. Remplacer le nom « quicktutoriel » par le vôtre.

[code lang= »php »]<?php if (function_exists(‘getFollowers’)) {echo getFollowers("quicktutoriel");}?>[/highlight]

Vous pouvez l’adapter en fonction de votre thème et de vos besoins. Et un plugin en moins.

  • Le cas FeedBurner – Google (1ère méthode)

Plusieurs scripts sont en circulation sur Internet pour récupérer le nombre d’abonnés. Mais personnellement aucun ne fonctionne correctement du moins pour moi. J’utilise le plugin Feed Stats pour afficher les statistiques de mon flux RSS et je me suis aperçu que le nombre d’abonné à généralement un décalage de 2 jours.

Par exemple aujourd’hui nous sommes le 24/12/2010 et j’ai le nombre d’abonné du 22/12/2010.

ll faut donc adapter les scripts que l’ont trouvent sur Internet. Je vais prendre le script de Mr Xhark .

Si on prend un exemple avec le blog Quick-Tutoriel. Nous allons utiliser cette adresse web (commune à tous les scripts) pour récupérer les informations de notre compte Feedburner :

[code lang= »text »]https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=quick-tutoriel[/highlight]

Après le mot-clé uri, vous devez mettre votre adresse de flux.

Par défaut, le script renvoi le nombre d’abonné du Jour J-1, comme on peut le voir ici, j’ai 0 abonné. Généralement il y a du retard.

Si nous rajoutons maintenant la date à notre adresse web :

[code lang= »text »]http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=quick-tutoriel&dates=2010-08-03[/highlight]

Nous voyons bien ici que le nombre d’abonnés est de 312. Ce qui correspond à mon plugin de statistiques.

Pour voir le script original de  Mr Xhark, cliquer-ici.

Script modifié afin de prendre en compte le décalage de 1 jour, afin d’éviter au maximum le 0 Abonné.

Mr Xhark a mis en place un système de cache qui permet de limiter les appels (paramétrable) aux serveurs Feedburner et en cas de défaillance de ceux-ci affiche le nombre d’abonnés dans le cache en attendant une nouvelle mise à jour.

[code lang= »php »]// Fonctions récupération Abonnés Flux RSS
function nbAboFeed($feedUri = ‘quick-tutoriel’, $feedFile = ‘nbfeed.txt’) {
# Licence : Creative Commons
# Author : Xhark, http://blogmotion.fr
# Modif  : REYNAUD Guillaume, https://quick-tutoriel.com, prise en compte d’un délai sur les dates (j-1)
# en secondes
$duree_cache = 3600;
$date_maj = date("Y-m-d", strtotime(‘-1 days’));

//si le fichier n’existe pas dans le cache (ou trop vieux)
if (@filemtime($feedFile) < time()-($duree_cache) ) {

$i = 0;
$Sortie= ‘KO’;
while (($Sortie <> ‘OK’) OR ($i == 2))
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, ‘https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=’ . $feedUri .’&dates=’ . $date_maj);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  // necessaire pour windows
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);      // necessaire pour windows
$data = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXMLElement($data);
$nbAbo = (int) $xml->feed->entry[‘circulation’];

if ( $nbAbo > 0)
{
$Sortie=’OK’;
}
else
{
$date_maj = date("Y-m-d", strtotime(‘-2 days’));
}
$i++;
}

# nbAbo correctement récupéré, écriture dans cache
if ( $nbAbo > 0 )
writeFeedFile($feedFile, $nbAbo);
# si feedburner indisponible
else
# si fichier cache existe, renvoit de la valeur
if(file_exists($feedFile)) return file_get_contents($feedFile);
# si fichier cache jamais crée et feedburner indispo, msg erreur
else return ‘Erreur, feedburner indispo’;
}

# déjà dans le cache
else
$nbAbo = file_get_contents($feedFile);

return $nbAbo;
}

function writeFeedFile($feedFile, $nbAbo) {
$ret = file_put_contents($feedFile, $nbAbo);
if (!$ret)
echo ‘Erreur ecriture feed’;
return;
}[/highlight]

J’ai le paramètre &dates à l’adresse web de récupération des informations pour se placer sur date à J-1 pour éviter le 0 Abonné.

J’effectue une boucle pour récupéré le nombre d’abonné du jour J-1, si celui-ci est à 0, je récupère les abonnés du Jour J-2, si ils sont toujours à 0 (nouveau blog), je sors sinon j’affiche les abonnés.  (Ce script n’est pas parfait, donc si vous voulez le modifier pour l’améliorer vous pouvez, merci de m’avertir afin que je le publie)

Voici maintenant ce que ça donne dans une page par exemple :

Voici maintenant un exemple d’intégration sur mon blog, j’affiche le nombre d’abonnés RSS et le nombre de Follower sur Twitter, le tout sans plugin.

  • Le cas FeedBurner – Google (2ème méthode)

Les variations du compteur de FeedBurner sont de plus en plus fréquente on passe de 400 à 200 abonnées en quelques heures. Pour pallier à ce dysfonctionnement certain on mis à disposition un nouveau script permettant de récupérer une moyenne sur 7 jours de vos abonnées RSS, puis ce script place la valeur en cache dans la base de données de WordPress. La fonction vérifie que le cache est toujours valide avant de faire une requête pour récupérer une valeur plus récente.

Comme d’habitude rajouter le script suivant dans le fichier functions.php de votre thème.

[code lang= »php »]// Nombre moyen de followers Feedburner sur 7 jours
add_option(‘myfeeds_count’,’0′, »,’yes’);
add_option(‘myfeeds_api_timer’,mktime() – 10000, »,’yes’);
function feedburner_readers($feed_id,$interval = 7){
if (get_option(‘myfeeds_api_timer’) < (mktime() – 86400)) {
$today = date(‘Y-m-d’, strtotime("now"));
$ago = date(‘Y-m-d’, strtotime("-".$interval." days"));
$feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feed_id."&dates=".$ago.",".$today;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $feed_url);
$data = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXMLElement($data);
$fb = $xml->feed->entry[‘circulation’];
$nb = 0;
foreach ($xml->feed->children() as $circ){$nb += $circ[‘circulation’];}
$mycount = round($nb/$interval);
update_option(‘myfeeds_count’, $mycount);}
update_option(‘myfeeds_api_timer’, mktime());
if (!get_option(‘myfeeds_count’)) return ‘0’;
else return get_option(‘myfeeds_count’);}[/highlight]

Ajoutez ensuite le code suivant là où vous désirez faire apparaître le nombre de lecteurs Feedburner. Pensez à remplacer l’identifiant par le vôtre (fin de l’url de votre flux RSS chez Feedburner).

[code lang= »php »]<?php if (function_exists(‘feedburner_readers’)) {echo feedburner_readers(‘Quick-tutoriel’);}?>[/highlight]

Pour modifier le texte, vous devez le rajouter directement dans l’appel de la fonction, voici un exemple :

[code lang= »php »]RSS (<?php if (function_exists(‘feedburner_readers’)) {echo feedburner_readers(‘Quick-tutoriel’);}?> abonnés)[/highlight]

Qui donnera : RSS (400 abonnés)

Pour modifier la période à utiliser lors du calcul de la moyenne de vos lecteurs Feedburner, utilisez le code suivant (en remplaçant le chiffre 7 par le nombre de jours désirés).

[code lang= »php »]RSS (<?php if (function_exists(‘feedburner_readers’,7)) {echo feedburner_readers(‘Quick-tutoriel’);}?> abonnés)[/highlight]
  • Le cas Facebook

Facebook propose aussi des API, permettant de récupérer des informations sur son compte. Mon but, récupérer le nombre d’amis que j’ai sur mon compte. La récupération d’information via les api Facebook est plus compliquée que les autres. Il faut suivre une procédure bien particulière.

ATTENTION!!! Cette astuce permet de récupérer le nombre de Fan d’une page Facebook et pas d’un compte. Il faudra donc créer une page Facebook. Pour avoir des explications complémentaires et créer sa page aller ici .

Vous devez d’abord récupérer une clé API Facebook. Pour cela connectez-vous à cette adresse : http://www.facebook.com/developers , puis connectez-vous à votre compte Facebook

Cliquer sur Autoriser

Cliquer ensuite sur Créer une application

Donner un nom à votre application, ici JFConnect, cliquer sur J’accepte, puis Créer une application.

Astuce!!! Il se peut que vous ayez ce message d’erreur lors de la création de votre application.

Pas de panique. Pour trouver vos codes secret et ID, cliquer sur Go Back. Puis ensuite en haut à droite cliquer sur Retour à mes applications.

Vous pourrez constater que votre application a bien été crée. Bug de la part de Facebook ?

Vous avez ainsi votre Clé API et Clé secrète qui nous servirons plus loin dans le tutoriel.

Ensuite il faut récupérer le fichier facebook.php ici et copier le à la racine de votre thème wordpress. (Exemple /wp_content/themes/(nom-theme)/)

Astuce!!! Attention pour télécharger le fichier, cliquer bien sur Download Source (en haut à droite)

Ensuite nous allons créer une nouvelle fonction dans le fichier functions.php de votre thème. Aller à la fin du fichier et rajouter ce code.

[code lang= »php »]//Fonction récupération Amis Facebook
function facebook_count() {
require_once(‘facebook.php’);
$facebook = new Facebook(array(
‘appId’  => ‘ID de l’application’,
‘secret’ => ‘Clé secrète’,
‘cookie’ => true,
));
$result = $facebook->api(array(
‘method’ => ‘fql.query’,
‘query’ => ‘select fan_count from page where page_id = ID-de-votre-page;’
));
$fb_fans = $result[0][‘fan_count’];

return $fb_fans;
}[/highlight]

Exemple du code :

Ensuite pour récupérer votre nombre d’amis, utiliser ce code dans une page ou dans votre thème :

[code lang= »php »]<?php echo facebook_count(); ?>[/highlight]

Voici un exemple de présentation vite fait :

Vous pouvez maintenant manipuler vos abonnés, followers, amis des 3 plus grands réseaux sociaux du moment. Les fonctions proposées ici ne sont pas parfaites et demande qu’à évoluer (Si vous les modifier merci de me le dire pour que je les publient).

That’s All.

Difficulté : Avancé

Modification :-

Crédits :

[print_link ]

2 Potins

  1. Très bon article, ce qui peut être pas mal, c’est de faire des photos originales avec des hashtags populaires… et coupler ça avec l’achat de followers pour avoir un peu de notoriété est très efficace ! C’est ce que j’ai fait avec

  2. Merci pour ces quotes. Attention en revanche à ne pas trop allourdir le chargement de WordPress, voir à le planter en cas d’indispo d’un des sites tiers.

    Je t’invite à lire également les modifications de mon script par WebSourcing qui intègre la gestion du cache avec wp-super-cache et quelques autres modifs sympas :)

Laisser un commentaire

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