[ Index ] |
|
Code source de SPIP 1.8.3 |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2005 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 // Ce fichier ne sera execute qu'une fois 15 if (defined("_ECRIRE_INC_POPULARITES")) return; 16 define("_ECRIRE_INC_POPULARITES", "1"); 17 18 // 19 // Popularite, modele logarithmique 20 // 21 22 function calculer_popularites($t) { 23 24 $duree = time() - $t; 25 // duree de demi-vie d'une visite dans le calcul de la popularite (en jours) 26 $demivie = 1; 27 // periode de reference en jours 28 $periode = 1; 29 // $a est le coefficient d'amortissement depuis la derniere mesure 30 $a = pow(2, - $duree / ($demivie * 24 * 3600)); 31 // $b est la constante multiplicative permettant d'avoir 32 // une visite par jour (periode de reference) = un point de popularite 33 // (en regime stationnaire) 34 // or, magie des maths, ca vaut log(2) * duree journee/demi-vie 35 // si la demi-vie n'est pas trop proche de la seconde ;) 36 $b = log(2) * $periode / $demivie; 37 38 // oublier un peu le passe 39 spip_query("UPDATE spip_articles SET maj=maj, popularite = popularite * $a"); 40 41 // ajouter les points visites 42 $count_article = Array(); 43 $query = "SELECT COUNT(*) as count,id_objet FROM spip_visites_temp WHERE maj > DATE_SUB(NOW(), INTERVAL $duree SECOND) AND type='article' GROUP BY id_objet"; 44 $res = spip_query($query); 45 while ($row = @spip_fetch_array($res)) { 46 $count_article[$row['count']] .= ','.$row['id_objet']; // l'objet a count visites 47 } 48 49 foreach($count_article as $count => $articles) { 50 $query = "UPDATE spip_articles 51 SET maj=maj, popularite = GREATEST(1,popularite) + $b * $count 52 WHERE id_article IN (0$articles)"; 53 spip_query($query); 54 } 55 56 // ajouter les points referers 57 $count_article = Array(); 58 $query = "SELECT COUNT(*) as count,id_objet FROM spip_referers_temp WHERE maj > DATE_SUB(NOW(), INTERVAL $duree SECOND) AND type='article' GROUP BY id_objet"; 59 $res = spip_query($query); 60 while ($row = @spip_fetch_array($res)) { 61 $count_article[$row['count']] .= ','.$row['id_objet']; // l'objet a count referers 62 } 63 64 foreach($count_article as $count => $articles) { 65 $query = "UPDATE spip_articles 66 SET maj=maj, popularite = GREATEST(1,popularite) + $b * $count 67 WHERE id_article IN (0$articles)"; 68 spip_query($query); 69 } 70 71 // et enregistrer les metas... 72 list($maxpop, $totalpop) = spip_fetch_array(spip_query("SELECT MAX(popularite), SUM(popularite) FROM spip_articles")); 73 ecrire_meta("popularite_max", $maxpop); 74 ecrire_meta("popularite_total", $totalpop); 75 ecrire_metas(); 76 } 77 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |