Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************/// Ce fichier ne sera execute qu'une foisif (defined("_ECRIRE_INC_POPULARITES")) return;define("_ECRIRE_INC_POPULARITES", "1");//// Popularite, modele logarithmique//function calculer_popularites($t) {$duree = time() - $t;// duree de demi-vie d'une visite dans le calcul de la popularite (en jours)$demivie = 1;// periode de reference en jours$periode = 1;// $a est le coefficient d'amortissement depuis la derniere mesure$a = pow(2, - $duree / ($demivie * 24 * 3600));// $b est la constante multiplicative permettant d'avoir// une visite par jour (periode de reference) = un point de popularite// (en regime stationnaire)// or, magie des maths, ca vaut log(2) * duree journee/demi-vie// si la demi-vie n'est pas trop proche de la seconde ;)$b = log(2) * $periode / $demivie;// oublier un peu le passespip_query("UPDATE spip_articles SET maj=maj, popularite = popularite * $a");// ajouter les points visites$count_article = Array();$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";$res = spip_query($query);while ($row = @spip_fetch_array($res)) {$count_article[$row['count']] .= ','.$row['id_objet']; // l'objet a count visites}foreach($count_article as $count => $articles) {$query = "UPDATE spip_articlesSET maj=maj, popularite = GREATEST(1,popularite) + $b * $countWHERE id_article IN (0$articles)";spip_query($query);}// ajouter les points referers$count_article = Array();$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";$res = spip_query($query);while ($row = @spip_fetch_array($res)) {$count_article[$row['count']] .= ','.$row['id_objet']; // l'objet a count referers}foreach($count_article as $count => $articles) {$query = "UPDATE spip_articlesSET maj=maj, popularite = GREATEST(1,popularite) + $b * $countWHERE id_article IN (0$articles)";spip_query($query);}// et enregistrer les metas...list($maxpop, $totalpop) = spip_fetch_array(spip_query("SELECT MAX(popularite), SUM(popularite) FROM spip_articles"));ecrire_meta("popularite_max", $maxpop);ecrire_meta("popularite_total", $totalpop);ecrire_metas();}?>