Top articles

Bonjour,

J'aimerai bien mettre en place sur mon site un top 5 des articles les + consultés (pas les plus commentés !!) ... Quelqu'un a-t-il une idée, un code, un hack ?

Merci

Réponses

  • Bonsoir Vincent,

    Pour pouvoir réaliser ce que tu veux, il faudrait déjà que tes articles soient comptés par nombre de leur affichage.

    Ça peut être une piste.

    Autrement dans le wiki tu as la Suggestion de Lecture par Amoweb, qui te permet de lister 5 articles de la catégorie.
  • Frédéric a écrit:
    Bonsoir Vincent,

    Pour pouvoir réaliser ce que tu veux, il faudrait déjà que tes articles soient comptés par nombre de leur affichage.

    Ça peut être une piste.

    Autrement dans le wiki tu as la Suggestion de Lecture par Amoweb, qui te permet de lister 5 articles de la catégorie.
    Merci, il est vrai que dans pluxml il n'y a pas les infos de clicks, etc, ... Ca pourrait d'ailleurs faire l'objet d'une amélioration pour de futur version ;)

    Je regarde avec intérêt l'article que tu me conseilles :)
  • Bonjour,

    Je suis arrivé à mes fins !!! Le top article fonctionne depuis ce matin sur mon site :)
    Je vais essayer de vous livrez mon code dans la journée ... J'en profiterai également pour vous livrez le code de l'affichage de ma timeline tweeter !

    L'ensemble de ces 2 fonctionnalités, a été passé dans l'optique de la modularité, afin de prévoir montée en charge et cloud-computing avec pluxml ;)

    A+ tard !
  • qu'entends-tu par "cloud computing" avec pluxml??
  • super_g2 a écrit:
    qu'entends-tu par "cloud computing" avec pluxml??
    La modularité des traitements permet, d'une part la parallélisation des processus, la répartition des traitements sur plusieurs machines en cas de montée en charge ... Alors qu'un programme monolithique ne permet pas ce genre de répartition !
    Et le principe du cloud computing est de pouvoir répartir les traitements dans le cloud :)
    Ensuite, en parler avec pluxml est évidemment un clin d'oeil, quoi que je ne désespère pas avoir un jour 100000 visiteurs par jour ;)
  • vincentvincent Member
    août 2010 modifié
    Bonjour,

    Comme je suis buté, j'ai trouvé un moyen de réaliser un système de "top articles" pour pouvoir afficher les articles plus plus consultés :)

    Je vous livre le code et le mode opératoire :

    Tous d'abord, je crée dans le répertoire de mon thème le fichier toparticle.php contenant le code suivant :
    <?php
      2 
      3     /**
      4      * Constructeur qui initialise l'objet plxMotor par référence
      5      *
      6      * @param     plxMotor    objet plxMotor passé par référence
      7      * @return    null
      8      * @version   1.0
      9      * @author    Vincent RABAH http://www.it-wars.com
     10      **/
     11     class plxTopArticle extends plxShow
     12     {
     13         function PlxShow($plxMotor)
     14         {
     15             $this->plxMotor = $plxMotor;
     16         }
     17 
     18         /**
     19         * Méthode qui affiche la liste des articles classés suivant le nombre de lecture
     20         *
     21         * @param    max      nombre d'articles maximum affichés
     22         * @return   stdout
     23         * @author   Vincent RABAH 
     24         **/
     25 
     26         function top($max=5)
     27         {
     28             $top = file("toparticle.txt");
     29             $top = array_slice($top,0,$max);
     30             foreach($top as &$val)
     31             {
     32                 $line=explode(";",$val);
     33                 echo '<li>['.$line[0].' consultations] <a href="'.$line[2].'">'.htmlspecialchars($line[1],ENT_QUOTES,PLX_CHARSET).'</a></li>';
     34             }
     35         }
     36 
     37         function store($file="toparticle_raw.txt",$art)
     38         {
     39                 $fh=fopen($file,'a') or die("Can't open ".$file);
     40                 fwrite($fh, $art);
     41                 fclose($fh);
     42         }
     43     };
     44 ?>
    
    Dans le fichier article.php de mon thème j'ajoute le code suivant :
    <?php
                     $top=new plxTopArticle($plxMotor);
                     $art= strip_tags($plxShow->plxMotor->plxRecord_arts->f('title')).";".'/?article'.intval($plxShow->plxMotor->plxRecord_arts->f('numero')).'/'.$plxShow->plxMotor->plxRecord_arts->f('url')."\n";
                     $top->store('toparticle_raw.txt',$art);
    ?>
    
    Cela remplit le fichier toparticle_raw.txt de la façon suivante :

    Titre de l'article;url de l'article ... Exemple :
    Développement web avec node.js;/?article162/developpement-web-avec-node-js
    Acheter un téléphone sous Android pour scripter en Perl;/?article105/acheter-un-telephone-sous-android-pour-scripter-en-perl
    Développement web avec node.js;/?article162/developpement-web-avec-node-js
    Un peu de ruby pour mon sitemap;/?article72/un-peu-de-ruby-pour-mon-sitemap
    VMware Workstation 7.1;/?article154/vmware-workstation-7-1
    VPN IPsec avec OpenBSD;/?article156/vpn-ipsec-avec-openbsd
    Réunion de lancement forum Grafotech Green IT;/?article143/reunion-de-lancement-forum-grafotech-green-it
    Du wifi dans le jardin;/?article158/du-wifi-dans-le-jardin
    J'ai testé l'iPad;/?article144/j-ai-teste-l-ipad
    VMware Go pour ESXi gagne en fontionnalités;/?article161/vmware-go-pour-esxi-gagne-en-fontionnalites
    Je cloud, tu cloud, nous computing;/?article71/je-cloud-tu-cloud-nous-computing
    Développement web avec node.js;/?article162/developpement-web-avec-node-js
    Réunion de lancement forum Grafotech Green IT;/?article143/reunion-de-lancement-forum-grafotech-green-it
    Se lancer ou non ?;/?article99/se-lancer-ou-non
    Mesure de consommation en entreprise (suite);/?article25/mesure-de-consommation-en-entreprise
    Du wifi dans le jardin;/?article158/du-wifi-dans-le-jardin
    VPN IPsec avec OpenBSD;/?article156/vpn-ipsec-avec-openbsd
    VPN IPsec avec OpenBSD;/?article156/vpn-ipsec-avec-openbsd
    
    Dans un cron, je lance la commande suivante :
    @hourly cat /var/www/toparticle_raw.txt | sort | uniq -c | perl -pe 's/^\s*([0-9]+) (.*).*/$1;$2/' |sort -rn > /var/www/toparticle.txt
    
    Je choisis une fréquence d'une heure qui pour moi est suffisante au vue de la fréquentation de mon blog. J'ai choisi de faire réaliser le traitement non pas par du code php, qui d'une part aurait ralenti l'affichage de la page plus le fichier toparticle_raw.txt grossit (en outre, Google maintenant prend en compte la vitesse d'affichage des site pour le référencement !!!), mais aussi pour gérer la montée en charge et garder une grande modularité .
    Le script génère un fichier toparticle.txt de la forme suivante et qui contient :

    le nombre de consultations;le titre de l'article;l'url
    191;Jumanji, un navigateur web Vim-like;/?article163/jumanji-un-navigateur-web-vim-like
    109;Développement web avec node.js;/?article162/developpement-web-avec-node-js
    86;VMware annonce l'arrivée de VSphere 4.1;/?article166/vmware-annonce-l-arrivee-de-vsphere-4-1
    44;Du wifi dans le jardin;/?article158/du-wifi-dans-le-jardin
    37;VMware Go pour ESXi gagne en fontionnalités;/?article161/vmware-go-pour-esxi-gagne-en-fontionnalites
    25;VPN IPsec avec OpenBSD;/?article156/vpn-ipsec-avec-openbsd
    22;Wifi et Rogue AP;/?article138/wifi-et-rogue-ap
    20;L'échange de clés Diffie Hellman expliqué;/?article160/l-echange-de-cles-diffie-hellman-explique
    18;Plug Computer moins de 5W pour un serveur;/?article147/plug-computer-moins-de-5w-pour-un-serveur
    17;test;/?article121/test
    16;Sécurité routeur et switch CISCO;/?article157/securite-routeur-et-switch-cisco
    15;ISO26000 adopté pour l'automne 2010 ?;/?article155/iso26000-adopte-pour-l-automne-2010
    15;Attaque par deni de service - DDOS;/?article145/attaque-par-deni-de-service-ddos
    13;VMware Go pour ESXi;/?article124/vmware-go-pour-esxi
    13;Mon parcours;/?article3/curriculum-vitae
    12;Réunion de lancement forum Grafotech Green IT;/?article143/reunion-de-lancement-forum-grafotech-green-it
    11;Réseaux sociaux par M6;/?article140/reseaux-sociaux-par-m6
    9;Distributed virtual switching pour XenServer;/?article159/distributed-virtual-switching-pour-xenserver
    8;Protéger sa marque sur Twitter;/?article152/proteger-sa-marque-sur-twitter
    8;Fuites sur les fonctionnalités de VSphere 4.1;/?article146/fuites-sur-les-fonctionnalites-de-vsphere-4-1
    
    Maintenant, dans le fichier sidebar.php de mon thème, j'ajoute le code suivant pour afficher les X articles les plus consultés :)
    <?php
                           $top=new plxTopArticle($plxMotor);
                            $top->top();
    ?>
    
    Voilà pour le top article ;)
  • ohoh, sympathique, très bien vu, mais quid de al compatibilité avec les hébergeurs n'autorisant pas du shell (crontab) ??
    tu pourrais automatiser via un script php externe (lancé à la fin du chargement de ta page index.php par exemple) la génération de ton fichier.txt... il suffit de mettre un timer sur le déclenchement, du genre, si !(mod(heur_actuelle,fréquence_voulue)) == 0; alors....

    tu vois?
  • vincentvincent Member
    juillet 2010 modifié
    C'est tout à fait réalisable :) Sinon, plutôt que de s'embêter avec des hébergeurs, faite comme moi :

    l'auto-hébergement à la maison sur mon ADSL ;)
Connectez-vous ou Inscrivez-vous pour répondre.