Merci moogli,
Je précise d'abord que n'arrivant pas à récupérer en php5 des variables externes à une fonction dans une fonction, je les ai donc passées en paramètres...
J'en profite au passage pour demander à quelqu'un qui m'explique parceque je ne comprends pas pourquoi je ne peux pas récupérer le contenu d'une variable à l'intérieur d'une fonction si la variable a été déclarée à l'exterieur de la fonction.Avant y'avait "global' et maintenant, je ne sais pas?
Bon je reviens sur le petit script, d'abord il convient de créer un fichier qui va contenir le nombre de facebook likes (les "j'aime") et le timestamp de la dernière mise à jour du dit fichier.
on peut faire ça:
$fbLike = 1;
$fbTime = 1369517530;
$data = $fbLike . "\n" . $fbTime;
file_put_contents('fbl.txt', $data);
On vient de créer le fichier 'fbl.txt' initialisé avec 1 'j'aime' et le timestamp d'aujourd'hui à 23h05.
Pas la peine de se soucier des données entrées ci-dessus, elle se mettront à jour dès la première connexion à la page facebook ciblée.
Maintenant le petit script qui va donc afficher le nombre de "j'aime" contenu dans le fichier fbl.txt. celà si et seulement si la dernière requête a été faite il y a moins de 300 secondes (5 minutes, ce que vous pouvez changer d'ailleurs).
Si la dernière requête à eu lieu il y a plus de 5 minutes, alors on va sur la page facebook récupérer le nombre de "j'aime" et on met à jour
1) Le nombre de "j'aime" si il y a lieu,
2) Le timestamp
3) Si jamais (malgré les 5 minutes entre chaque requête réelle sur facebook) la page renvoyait un code erreur 403 ou tout autre code, alors c'est la dernière valeur contenu dans fbl.txt qui serait prise en compte sans afficher d'erreur (403 par exemple) où que se soit d'ailleurs.
Il faut remplacer le "123456789012345" par l'ID facebook désiré.
<div class="socialFacebookIcon">
<?php
$readFbl = file_get_contents('fbl.txt');
list($fbLike, $fbTime) = explode("\n", $readFbl);
$realTime = time();
$url = "http://graph.facebook.com/123456789012345";
function get_facebook_likes($receiveUrl,$fbLike,$fbTime,$realTime)
{
if ($realTime - $fbTime >= 300)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $receiveUrl);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == "200")
{
$json = file_get_contents("http://graph.facebook.com/123456789012345");
$result = json_decode($json, true);
$fbTime = $realTime;
$data = $result["likes"] . "\n" . $fbTime;
file_put_contents('fbl.txt', $data);
return $result["likes"];
}
else
{
return $fbLike;
}
}
else
{
return $fbLike;
}
}
?>
<span style="text-align:center;">
<?php echo get_facebook_likes($url,$fbLike,$fbTime,$realTime); ?>
</span>
<a href="http://www.facebook.com/pages/LeNomDeLaPage/123456789012345" target="_blank">
<img src="/images/facebookNew.png" alt="suivez nous sur Facebook" border="0px"/>
</a>
</div>
Je précise qu'il n'y a pas besoin d'api facebook et que ça marche sur n'importe quel compte facebook dont vous avez l'Id.
En espérant que ça servira à certains.
Bonne nuit à tous.