[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> popularites.php (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2007                                                *
   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  if (!defined("_ECRIRE_INC_VERSION")) return;
  15  
  16  
  17  //
  18  // Popularite, modele logarithmique
  19  //
  20  
  21  // http://doc.spip.org/@calculer_popularites
  22  function calculer_popularites() {
  23  
  24      // Si c'est le premier appel, ne pas calculer
  25      $t = $GLOBALS['meta']['date_popularites'];
  26      ecrire_meta('date_popularites', time());
  27      ecrire_metas();
  28      if (!$t)
  29          return;
  30  
  31      $duree = time() - $t;
  32      // duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
  33      $demivie = 1;
  34      // periode de reference en jours
  35      $periode = 1;
  36      // $a est le coefficient d'amortissement depuis la derniere mesure
  37      $a = pow(2, - $duree / ($demivie * 24 * 3600));
  38      // $b est la constante multiplicative permettant d'avoir
  39      // une visite par jour (periode de reference) = un point de popularite
  40      // (en regime stationnaire)
  41      // or, magie des maths, ca vaut log(2) * duree journee/demi-vie
  42      // si la demi-vie n'est pas trop proche de la seconde ;)
  43      $b = log(2) * $periode / $demivie;
  44  
  45      // oublier un peu le passe
  46      spip_query("UPDATE spip_articles SET maj=maj, popularite = popularite * $a");
  47  
  48      // enregistrer les metas...
  49      $row = spip_fetch_array(spip_query("SELECT MAX(popularite) AS max, SUM(popularite) AS tot FROM spip_articles"));
  50      ecrire_meta("popularite_max", $row['max']);
  51      ecrire_meta("popularite_total", $row['tot']);
  52  
  53  
  54      // Une fois par jour purger les referers du jour ; qui deviennent
  55      // donc ceux de la veille ; au passage on stocke une date_statistiques
  56      // dans spip_meta - cela permet au code d'etre "reentrant", ie ce cron
  57      // peut etre appele par deux bases SPIP ne partageant pas le meme
  58      // _DIR_TMP, sans tout casser...
  59      $aujourdhui = date("Y-m-d");
  60      if ($date = $GLOBALS['meta']['date_statistiques']
  61      AND $date != $aujourdhui)
  62          spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0");
  63      ecrire_meta('date_statistiques', $aujourdhui);
  64  
  65      // et c'est fini pour cette fois-ci
  66      ecrire_metas();
  67      return 1;
  68  
  69  }
  70  
  71  //
  72  // Applique la regle de decroissance des popularites
  73  //
  74  // http://doc.spip.org/@cron_popularites
  75  function cron_popularites($t) {
  76      calculer_popularites();
  77      return 1;
  78  }
  79  
  80  
  81  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics