[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/ecrire/ -> inc_popularites.php3 (source)

   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  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7