From 5caaa78b6d54c9463ba144f45941ba311d5c3658 Mon Sep 17 00:00:00 2001 From: ARNO* <arno@rezo.net> Date: Sat, 6 Jul 2002 14:48:16 +0000 Subject: [PATCH] Optimisation referers. Calcul nombre de visites directes et popularite dans spip_articles --- ecrire/inc_base.php3 | 11 +++++- ecrire/inc_presentation.php3 | 2 +- ecrire/inc_statistiques.php3 | 65 +++++++++++++++++++++++++++++++- ecrire/inc_version.php3 | 2 +- ecrire/index.php3 | 6 +++ ecrire/statistiques_recents.php3 | 24 +++++++++++- ecrire/statistiques_tous.php3 | 29 +++++++++++++- 7 files changed, 131 insertions(+), 8 deletions(-) diff --git a/ecrire/inc_base.php3 b/ecrire/inc_base.php3 index f98ed31a58..da52e732f6 100644 --- a/ecrire/inc_base.php3 +++ b/ecrire/inc_base.php3 @@ -30,7 +30,8 @@ function creer_base() { export VARCHAR(10) DEFAULT 'oui', date_redac datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, visites INTEGER DEFAULT '0' NOT NULL, - referers BLOB NOT NULL, + referers INTEGER DEFAULT '0' NOT NULL, + popularite INTEGER DEFAULT '0' NOT NULL, accepter_forum CHAR(3) NOT NULL, auteur_modif bigint(21) DEFAULT '0' NOT NULL, date_modif datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, @@ -838,6 +839,14 @@ function maj_base() { spip_query($query); } + if ($version_installee < 1.432) { + spip_query("ALTER TABLE spip_articles DROP referers"); + $query = "ALTER TABLE spip_articles ADD referers INTEGER DEFAULT '0' NOT NULL"; + spip_query($query); + $query = "ALTER TABLE spip_articles ADD popularite INTEGER DEFAULT '0' NOT NULL"; + spip_query($query); + } + // // Mettre a jour le numero de version installee diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3 index 79a8be8a02..d81243a16f 100644 --- a/ecrire/inc_presentation.php3 +++ b/ecrire/inc_presentation.php3 @@ -1573,7 +1573,7 @@ if (ereg("index.php3$", $GLOBALS['REQUEST_URI'])) { echo "<br>Les icones de l'interface sont de <a href='http://jimmac.musichall.cz/'>Jakub 'Jimmac' Steiner</a>"; } if (ereg("statistiques_visites.php3$", $GLOBALS['REQUEST_URI']) OR ereg("statistiques_referers.php3$", $GLOBALS['REQUEST_URI'])) { - echo "<br>L'affichage des requêtes des moteurs de recherche est réalisé<br>à partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>,<br> par Jean-Pierre Dézélus."; + echo "<br>L'affichage des requêtes des moteurs de recherche est réalisé<br>à partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>, par Jean-Pierre Dézélus"; } ?> </div></blockquote> diff --git a/ecrire/inc_statistiques.php3 b/ecrire/inc_statistiques.php3 index 1cacc24f7f..cdfade70ee 100644 --- a/ecrire/inc_statistiques.php3 +++ b/ecrire/inc_statistiques.php3 @@ -201,10 +201,71 @@ function calculer_visites(){ $result_effacer = spip_query($query_effacer); } - $query_effacer = "DELETE FROM spip_visites_referers WHERE date < DATE_SUB(NOW(),INTERVAL 7 DAY) AND visites = '1'"; - $result_effacer = spip_query($query_effacer); } +function supprimer_referers($type){ + + // Recuperer les 100 plus gros referers de ce type + $query = "SELECT id_referer, visites FROM spip_visites_referers WHERE type ='$type' ORDER BY visites DESC LIMIT 0,100"; + $result = spip_query($query); + while ($row = mysql_fetch_array($result)) { + $id_referer[] = $row['id_referer']; + $visites = $visites + $row['visites']; + } + + // Supprimer les autres s'ils datent de plus d'une semaine + if ($id_referer){ + $referers = join($id_referer, ","); + $query = "DELETE FROM spip_visites_referers WHERE type ='$type' AND id_referer NOT IN ($referers) AND date < DATE_SUB(NOW(),INTERVAL 7 DAY)"; + $result = spip_query($query); + } + + // Reinjecter total des visites des referers dans spip_articles + if (ereg("article([0-9]+)", $type, $regs)){ + $id_article = $regs[1]; + if ($visites<1) $visites = 1; + $query = "UPDATE spip_articles SET referers = '$visites' WHERE id_article = '$id_article'"; + $result = spip_query($query); + } + +} + +function optimiser_referers(){ + + // Supprimer referers inutiles + + supprimer_referers("tout"); + + $query = "SELECT id_article FROM spip_articles WHERE statut = 'publie'"; + $result = spip_query($query); + while ($row = mysql_fetch_array($result)) { + $id_article = $row['id_article']; + supprimer_referers("article$id_article"); + } + + + // Calculer et reinjecter popularite + $query = "SELECT id_article, visites, referers FROM spip_articles WHERE statut = 'publie'"; + $result = spip_query($query); + while ($row = mysql_fetch_array($result)) { + $id_article = $row['id_article']; + $visites = $row['visites']; + $referers = $row['referers']; + $popularite[$id_article] = $visites * $referers; + } + if (count($popularite)>0){ + $max_pop = max($popularite); + while (list($id_article, $pop) = each($popularite)) { + $relatif = round($pop/$max_pop*1000000); + $query = "UPDATE spip_articles SET popularite = '$relatif' WHERE id_article = '$id_article'"; + $result = spip_query($query); + } + } +} + + + + ?> diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index a2ea15431e..539a0910d2 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -13,7 +13,7 @@ define("_ECRIRE_INC_VERSION", "1"); // // version de la base -$spip_version = 1.431; +$spip_version = 1.432; // version de spip // (mettre a jour a la main et conserver la mention "CVS") diff --git a/ecrire/index.php3 b/ecrire/index.php3 index a4af2a4f5a..e24a45757e 100644 --- a/ecrire/index.php3 +++ b/ecrire/index.php3 @@ -456,6 +456,12 @@ if (($date - $date_opt) > 8 * 3600) { calculer_visites(); } +// Optimiser les referers +if (($date - $date_opt) > 19 * 3600) { + include ("inc_statistiques.php3"); + optimiser_referers(); +} + include_local ("inc_mail.php3"); include_local ("inc_sites.php3"); diff --git a/ecrire/statistiques_recents.php3 b/ecrire/statistiques_recents.php3 index 5bb77ae156..9f6184301a 100644 --- a/ecrire/statistiques_recents.php3 +++ b/ecrire/statistiques_recents.php3 @@ -47,10 +47,30 @@ if ($row = mysql_fetch_array($result)) { $date = $row['cnt']; } -afficher_articles("Les articles récents (3 mois) les plus visités", +echo "<font size=2 face='verdana,arial,helvetica'><b>"; +echo "[<a href='statistiques_recents.php3'>par nombre de visites</a>] "; +echo "[<a href='statistiques_recents.php3?critere=referers'>par arrivées directes sur la page</a>] "; +echo "[<a href='statistiques_recents.php3?critere=popularite'>par popularité</a>] "; +echo "</b></font><p>"; + +if ($critere == "referers"){ + afficher_articles("Les articles récents (3 mois) les plus référencés", "SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". -"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY visites DESC LIMIT 0,100", true); +"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY referers DESC LIMIT 0,100", true); +} +else if ($critere == "popularite"){ + echo propre("La ÇpopularitéÈ est calculée d'après le nombre d'arrivées directes sur un article, multiplié par le nombre de visites. Un article devient donc «populaire» lorsqu'il fait l'objet d'un référencement sur d'autres sites et lorsqu'il est très visité.")."<p>"; + + afficher_articles("Les articles récents (3 mois) les plus populaires", +"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". +"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY popularite DESC LIMIT 0,100", true); +} +else{ + afficher_articles("Les articles récents (3 mois) les plus visités", +"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". +"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY visites DESC LIMIT 0,100", true); +} fin_page(); diff --git a/ecrire/statistiques_tous.php3 b/ecrire/statistiques_tous.php3 index a2dc54ce19..49b38f0edf 100644 --- a/ecrire/statistiques_tous.php3 +++ b/ecrire/statistiques_tous.php3 @@ -47,9 +47,36 @@ if ($row = mysql_fetch_array($result)) { } -afficher_articles("Les articles les plus visités depuis le début", + + + +echo "<font size=2 face='verdana,arial,helvetica'><b>"; +echo "[<a href='statistiques_tous.php3'>par nombre de visites</a>] "; +echo "[<a href='statistiques_tous.php3?critere=referers'>par arrivées directes sur la page</a>] "; +echo "[<a href='statistiques_tous.php3?critere=popularite'>par popularité</a>] "; +echo "</b></font><p>"; + +if ($critere == "referers"){ + afficher_articles("Les articles les plus visités depuis le début", +"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". +"FROM spip_articles WHERE visites > 0 ORDER BY referers DESC LIMIT 0,100", true); +} +else if ($critere == "popularite"){ + + echo propre("La ÇpopularitéÈ est calculée d'après le nombre d'arrivées directes sur un article, multiplié par le nombre de visites. Un article devient donc «populaire» lorsqu'il fait l'objet d'un référencement sur d'autres sites et lorsqu'il est très visité.")."<p>"; + afficher_articles("Les articles les plus visités depuis le début", +"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". +"FROM spip_articles WHERE visites > 0 ORDER BY popularite DESC LIMIT 0,100", true); +} +else{ + afficher_articles("Les articles les plus visités depuis le début", "SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ". "FROM spip_articles WHERE visites > 0 ORDER BY visites DESC LIMIT 0,100", true); +} + + + + fin_page(); -- GitLab