Wikini

AggregerLesReferences

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-198-41-76.compute-1.amazonaws.com
Je ne sais pas s'il en va de même pour vous, mais personnellement j'ai de nombreuses Références qui proviennent de forums (typiquement phpBB) ou de Google, ce qui fait que la liste est très vite polluée puisque pour un même sujet, avec les options diverses type tris et autres, il peut y avoir plusieurs URLs stockées dans les références qui pointent toutes vers le même endroit.

J'ai donc fait une petite action {{AggregerReferences}}, qui peut finalement être lancée par tout le monde (ou juste par un administrateur si un tel système est en place chez vous) et qui "nettoye" toutes les URLs en fonction de quelques expressions régulières. Ce n'est certes pas parfait mais c'est déjà çà.

Je ne suis pas un spécialiste des regexps c'est sans doute améliorable sur la forme, et sur le fond il doit y avoir plein d'autres paramètres à nettoyer, n'hésitez pas à ajouter les votres.

<?php

  
// We process the referer string to remove various (useless) parts
  
$patterns = array(
               
"/[?|&]start=[0-9]*/",
               
"/[?|&]SID=[^&]*/",
               
"/[?|&]sid=[^&]*/",
               
"/#.*/",
               
"/[?|&]SESSION=[^&]*/",
               
"/[?|&]PHPSID=[^&]*/",
               
"/[?|&]highlight=[^&]*/",
               
"/[?|&]postdays=[0-9]*/",
               
"/[?|&]postorder=[^&]*/",
               
"/[?|&]hl=[^&]*/",
               
"/[?|&]ie=[^&]*/",
               
"/[?|&]btnG=[^&]*/",
               
"/[?|&]meta=[^&]*/",
               
"/[?|&]lr=[^&]*/",
               
"/[?|&]start=[^&]*/",
               
"/[?|&]sourceid=[^&]*/",
               
"/[?|&]sa=[^&]*/",
               
"/[?|&]X=[^&]*/",
               
"/[?|&]gb=[^&]*/",
               
"/[?|&]forum=[^&]*/",
               
"/[?|&]rtype=[^&]*/",
               
"/[?|&]dt=[^&]*/",
               
"/[?|&]cid=[^&]*/",
               
"/[?|&]x=[^&]*/",
               
"/[?|&]bhv=[^&]*/",
               
"/[?|&]profil=[^&]*/",
               
"/[?|&]cop=[^&]*/",
               
"/[?|&]ei=[^&]*/",
               
"/[?|&]fr=[^&]*/",

    );
  
  
$replacements = array();
  
$unique_referrers[] = array();
  
$cleaned_referrers[] = array();

  
$referrers $this->LoadReferrers();

  echo 
"Nettoyage dans la base des <strong>" count($referrers) . "</strong> référants différents existant(s).<br /><br />";
  echo 
'<ul>';
  foreach (
$referrers as $referrer)
  {
    
// On nettoye le referrer en cours en fonction des expressions régulières ci-dessus
    
$cleaned_referrer preg_replace($patterns$replacements$referrer['referrer']);

    
// On met à jour dans la base seulement s'il y a lieu 
    
if ( $cleaned_referrer != $referrer['referrer'] )
    {
      
$sql "update " $this->config["table_prefix"]."referrers set referrer = '".mysql_escape_string($cleaned_referrer)."' where referrer = '".mysql_escape_string($referrer['referrer'])."' ";
      echo 
"<li>URL <a href=\"$cleaned_referrer\">$cleaned_referrer</a> nettoyée ;</li>";
      
$this->Query($sql);
    }
    else
    {
      echo 
"<li>URL <a href=\"$cleaned_referrer\">$cleaned_referrer</a> déjà nettoyée ;</li>";
    }

    
$unique_referrers[] = $referrer['referrer'];
    
$cleaned_referrers[] = $cleaned_referrer;
  }
  echo 
'</ul>';

  
$temp_referrers array_unique($unique_referrers);
  echo 
"<br />Au départ il y avait <strong>" . (count($temp_referrers)-1). "</strong> référants uniques.";

  
$temp_referrers array_unique($cleaned_referrers);
  echo 
"Après la purge il n'y a plus que <strong>" . (count($temp_referrers)-1). "</strong> référants uniques.<br />";
?>


Si vous voulez tester il suffit de commenter la ligne comportant "Query($sql)" pour avoir un aperçu du résultat (l'action affiche les URLs purgées, et le nombre initial d'URLs différentes puis le nombre final d'URLs après la purge - personnellement j'ai réduit de 40% le nombre de sources de provenances (évidemment, çà ne change rien niveau occupation espace disque au sein de la table puisque les entrées ne sont pas comptées mais uniquement insérées)).

Evidemment, le nettoyage gagnerait peut être à être fait à la source (au moment du stockage) mais cette version est plus souple d'utilisation ...

-- SergiO?



Démo

Cf. http://www.wikini.net/dev/wakka.php?wiki=AggregerLesReferences
Action inconnue "AggregerReferences"
Pour l'essentiel et à chaud je trouve cela très bien vu. Quelques remarques :
Comme il s'agit d'une action qui n'a que peu d'impact sur le reste, nous pourrions l'intégrer assez rapidement. Il faut voir s'il y a d'autres réaction dans l'assistance...
-- CharlesNepote


J'ai tenu compte de tes remarques et ai modifié le code en conséquence.
Il est évident que cette purge est totalement inutile sur les sites qui ont beaucoup de référents ayant eux mêmes des URLs "propres", ce qui n'est pas mon cas. Cette aggrégation est destinée à clarifier les référants pour ce genre de cas :
http://www.un-site.com/forum/viewtopic.php?t=1511&postdays=0&postorder=asc&start=20
http://www.un-site.com/forum/viewtopic.php?t=1511&start=20
http://www.un-site.com/forum/viewtopic.php?t=11654&postdays=0&postorder=asc&start=0
http://www.un-site.com/forum/viewtopic.php?topic=11926&forum=5
http://www.un-site.com/forum/viewtopic.php?t=11926&postdays=0&postorder=asc&start=40
http://www.un-site.com/forum/viewtopic.php?topic=11950&forum=5
http://www.un-site.com/forum/viewtopic.php?t=11812&postdays=0&postorder=asc&start=0
http://www.un-site.com/forum/viewtopic.php?t=11812&start=0
http://www.un-site.com/forum/viewtopic.php?t=11812&start=5
... où un sujet d'un message va avoir plusieurs représentations (selon les ordres de tris, les SESSID qui apparaissent parfois, etc.), ou effectivement pour des recherches Google ou Voilà (bien que les URLs Google / Voilà une fois purgées ne soient plus fonctionnelles, à contrario des URLs issues des forums qui elles continuent de fonctionner une fois débarassées des paramètres superflus).
-- SergiO?
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]