Plugin Analyclick - un compteur de téléchargements

Ce plugin permet de compter les téléchargements de documents sur son site. Il introduit une balise #URL_DOC_COMPTEUR qui va compter chaque clic fait sur ce lien. Il affiche une page de statistique.

Avertissement

Le passage en SPIP v.3 est en cours merci de me signaler les bugs que vous trouverez.

Installation

Le plugin s’installe comme tout autre plugin, téléchargez le fichier ZIP et placer son contenu dans votre répertoire « plugins/ ».

Il va installer un nouveau menu « Téléchargements » pour permettre de suivre les statistique de téléchargement dans le menu statistique, si celles-ci sont activées, ou dans le menu édition dans le cas contraire.
En SPIP 3, le plugin ajoute un onglet sur la page de suivi des statistique (il est donc nécessaire d’activer les statistiques du site).

Pour configurer le plugin, vous devez vous rendre sur la page des téléchargements et cliquer sur l’icône de configuration dans le bloc de raccourcis.

  • Vous pouvez configurer le délai entre deux clics (en seconde). Cela évite qu’un même utilisateur cliquant sur le lien pendant ce délai ne soit compté plusieurs fois. Une valeur négative correspond à un temps infini et ne va compter qu’un seul téléchargement par adresse IP.
  • Vous pouvez sécuriser les URLs des liens de téléchargement. Comme ceux-ci sont de la forme : MON_SITE/spip.php?action=telecharger&arg=35&type=image.jpeg, il est possible à un utilisateur peu délicat de chercher à charger des document en modifiant l’identifiant du document passé dans l’URL. La sécurisation ajout une clé dépendant du document et de l’utilisateur pour éviter cela.

Principe

Le principe du plugin est de permettre de suivre les téléchargements de certains documents (une notice, un programme ou un document particulier...). Il faut pour cela utiliser le raccourci ou l’url fourni par le plugin.

Utilisation

Le plugin déclare :
-  un raccourcis <docxx|compteur> qui s’utilise dans les articles comme le raccourci <docxx> et qui va compter les téléchargements.
-  une balise #URL_DOC_COMPTEUR que vous pouvez utiliser dans vos squelettes qui renvoie un lien vers le document et qui comptera les clics faits sur ce lien.
-  une balise #COMPTEUR_TELECHARGEMENT qui permet de connaitre le nombre de téléchargements dans une boucle document.

<BOUCLE_doc(DOCUMENTS)>
Le document #ID_DOCUMENT a été téléchargé #COMPTEUR_TELECHARGEMENT fois<br/>
</BOUCLE_doc>

Dans l’espace privé

Le plugin utilise le module de statistique de SPIP pour afficher les statistiques de téléchargement. Vous y accédez depuis le menu Statistique, si celles-ci sont actives ou le menu Édition dans le cas contraire.
En SPIP 3, les statistiques sont accessibles dans le menu Statistiques, onglet Téléchargements.

Calcul de statistique

Le plugin installe une table DOC_COMPTEURS qui stocke les téléchargements journaliers de document.

DOC_COMPTEURS
id_document date telechargement

On peut l’utiliser afin de calculer des statistiques sur les téléchargements, en effet, la balise #TELECHARGEMENT va faire la somme sur la période donnée.

Ainsi, la boucle suivante donne le nombre de téléchargements par document pour 2011.

<BOUCLE_stat(DOC_COMPTEURS){date >= 2011-01-01}{date < 2012-01-01}>
   #ID_DOCUMENT : #TELECHARGEMENT<br />
</BOUCLE_stat>

et pour le top10 des téléchargements de la semaine en cours (cela peut être utile) :

[(#SET{date,[(#EVAL{ date("Y-m-d",strtotime("now")-7*24*3600); })]})]
<BOUCLE_stat(DOC_COMPTEURS){date>#GET{date}}{!par telechargement}{0,10}>
   <BOUCLE_doc(DOCUMENTS){id_document}>
      [(#TITRE|sinon{#ID_DOCUMENT})]
   </BOUCLE_doc>
   : #TELECHARGEMENT<br/>
</BOUCLE_stat>

Le critère {plat} supprime ce comportement et permet d’accéder aux téléchargements au jour le jour.

Bonus

En bonus, le plugin propose un gros bouton de téléchargement au travers du modèle doc_bouton.
Il prend les paramètres compteur si on veut compter les téléchargements et un paramètre d’alignement (left, center, right). Le paramètre couleur permet de changer la couleur du bouton (par défaut, en orange). Il peut prendre les valeurs orange, mauve ou bleu.

<docXX|bouton|center|couleur=orange|compteur=1>

En fait, le paramètre couleur déclare le bouton dans une classe .doc_bouton_couleur. Vous pouvez donc ajouter des boutons en déclarant la classe correspondante dans votre css (voir les exemples dans le css du plugin et le dossier /img).

Discussion

53 discussions

  • 3
    Christophe Noisette

    Bonjour, je viens de me rendre compte que pour que compteur marche, il faut absolument utiliser et non pas, comme j’essayais de la faire . Autrement dit, les plugins analyclicks et medias ne peuvent pas être utilisés ensemble. Quelqu’un a-t-il une idée pour faire comprendre à analyclick de compter les téléchargements des docs qui sont insérés via  ? Merci d’avance et bonne journée.

    • Bonjour,

      Le plugin utilise son propre système de modèle sans écraser celui de SPIP. Ceci permet de choisir de ne compter les téléchargements que pour certains documents bien ciblés.
      Rien ne vous empêche cependant de créer vos propres modèles en utilisant #URL_DOC_COMPTEUR plutôt que #URL_DOCUMENT dans la définition du lien (recopiez les modèles dans le dossier /modeles de votre squelette pour faire la modification sans impacter le plugin médias).
      Je ne connait pas bien le mécanisme du plugin médias, mais il est peut être possible également d’utiliser le mécanisme d’aide à l’insertion de modèle pour renvoyer sur l’adresse du compteur du type : MON_SITE/spip.php?action=telecharger&arg=35&type=image.jpeg
      PS : vous pouvez également poser la question au plugin médias pour savoir s’ils peuvent se brancher sur l’url de comptage (#URL_DOC_COMPTEUR) lorsque le plugin analyclick est activé.

      @+

    • Christophe Noisette

      Merci d’avoir pris le temps de me répondre. Comme je ne suis pas sûr d’avoir compris, je me permets de vous proposer ce que j’ai l’intention de modifier. Dupliquer le modèle « media_vignette.html », par exemple, le copier dans mon dossier de mes modèles, et changer la ligne

      [(#SETvignette,#LOGO_DOCUMENTvignette|sinon#URL_DOCUMENT| media_generer_vignette#EXTENSION|sinon#LOGO_DOCUMENTicone)]

      par

      [(#SETvignette,#LOGO_DOCUMENTvignette|sinon#URL_DOCCOMPTEUR| media_generer_vignette#EXTENSION|sinon#LOGO_DOCUMENTicone)]

      Est-ce correct ?

      Par ailleurs, je vais aussi poser la question au forum du plugin « media », comme vous le suggérez.

    • Oui, c’est cela (j’ai du mal à voir le code dans votre post, il faut l’encadrer avec une balise <code></code>). #URL_DOC_COMPTEUR marche comme #URL_DOCUMENT sauf qu’elle en profite pour incrémenter un compteur avant de renvoyer sur le document lui même...

      @+

    Répondre à ce message

  • 2

    Bonjour et merci pour cette version en spip3.
    Tout fonctionne normalement.
    Superbe travail et merci encore.
    J’aurai juste une petite question au sujet des liens des documents générés.
    Il sont maintenant renommé par exemple avec une extension
    http://www.edition999.info/spip.php?action=telecharger&arg=3266&hash=f3b6237cc6097fa272afd64a6ddec3abaaac7655
    Et cela me pose un problème pour le sitemap et pour le référencement google, car il change à chaque fois et google me les met en erreur.
    Je pense que j’ai dû me tromper sur des reports et je n’arrive pas à changer.
    Merci de votre réponse et à bientôt
    Mon site : Edition999
    Jean-Michel.

    • Bonjour,

      Le plugin utilise un formulaire sécurisé pour l’envoie du document : il calcule une clé (hash) propre au document et à la session pour éviter un accès direct (en changeant le numéro du document).
      L’avantage est qu’on contrôle mieux l’accès aux documents (si on n’autorise pas l’accès à tous), l’inconvénient est que l’url change à chaque fois...
      On pourrait être moins restrictif...

      Cela se passe dans :
      -  action/telecharger.php : il suffit de commenter les lignes 20-21 qui contrôle la clé pour que les liens Google fonctionne (en ignorant la clé).
      -  balise/url_doc_compteur.php : il faut changer le moyen de calculer le lien en mettant :
      array('url'=>generer_url_action('telecharger',"arg=$id_document",true))
      à la place de :
      array('url'=>$securiser_action("telecharger",$id_document))

      Je peux voir à introduire une option de ce type.

      @+

    • Bonjour,
      Merci beaucoup pour votre réponse.
      C’est exactement cela.
      C’est comme vous voulez ou pouvez suivant le temps que vous pouvez y consacrer.
      L’intégrer dans le plugin serait bien sûr plus simple pour tous les utilisateurs et aurait l’avantage de ne pas se perdre dans les méandres d’internet je jour où un utilisateur aura besoin de ce genre de correctif.
      Merci encore et je testerai sans problème le correctif si vous le mettez en ligne.
      Jean-Michel

    Répondre à ce message

  • 3

    Bonjour
    Je viens de télécharger le plugin, et j’ai le message suivant :
    Fatal error : Call to undefined function json_encode() in /mnt/112/sdb/9/a/countrymilly/plugins/auto/analyclick/exec/statistiques_anaclic_v3.php on line 165

    La ligne en question :
    echo recuperer_fond (’fonds/statistiques_anaclic_v3’, array(’id_document’=>$id_document, ’duree’=>$duree, ’duree_mois’=>$duree_mois, ’stat_jour’ => json_encode($statj), ’stat_mois’ => json_encode($statm) )) ;

    Que faire ?
    Cordialement
    Patrick

    • Bonjour,

      La fonction json_encode est dans php >= 5.2.
      Il y a un contournement dans SPIP : essayez d’ajouter la ligne :
      include_spip (« inc/json ») ;
      avant la ligne incriminée...

      Cordialement,

    • Il faut lire la ligne (sans correction typo) :
      include_spip ("inc/json");

    • Merci beaucoup, ça fonctionne !!!
      Cordialement
      Patrick

    Répondre à ce message

  • 2

    Bonjour,

    J’aimerai faire évoluer ce plugin en ajoutant id_auteur aux autres enregistrement dans la base :
    id_document
    date
    telechargement

    Cela vous parait-il intéressant et logique ?

    Merci.

    • Bonjour,

      Le téléchargement correspond au nombre de téléchargements pour un document donnée un jour donné, tout auteur confondu. Il n’est donc pas possible d’ajouter un id_auteur.
      On ne cherche pas à savoir qui télécharge quoi (on peut d’ailleurs télécharger un document sans être enregistré), mais quel document et combien de fois il est téléchargé.
      Il faudrait reprendre le plugin pour pister qui charge quoi (si c’est ce que vous voulez).

      @+

    • Merci pour votre réponse.
      En effet, ma démarche s’inscrivait plutot au sein d’un site complètement restreint dans le cas où chaque auteur aurais pu retrouver les documents qu’il a précédemment téléchargés.
      Je vais « creuser » le plugin pour voir si je peux m’en inspirer et en proposer pouquoi pas un autre plus adapté à ce cas.

      Merci.

    Répondre à ce message

  • 1

    Bonjour,
    Il n’y a toujours pas de version prévue pour spip 3.0 ?
    Quelqu’un connaît il un autre moyen de compter le nombre de téléchargements d’un Pdf d’un article ?
    Merci.

    Répondre à ce message

  • 6

    Bonjour !
    Qu’en est-il d’une version spip3 de ce plugin ?
    Cordialement
    Amaury

    Répondre à ce message

  • 11

    Bonjour,

    J’utilise Accès restreint et la protection des documents.

    Du coup, les deux ne sont pas compatibles -> une fois les documents protégés, #URL_DOC_COMPTEUR ne génère pas l’url du document comme dans inc/document.php :

    function generer_url_document_dist($id_document, $args=’’, $ancre=’’)

    include_spip(’inc/autoriser’) ;
    if (!autoriser(’voir’, ’document’, $id_document)) return ’’ ;

    $r = sql_fetsel(« fichier,distant », « spip_documents », « id_document= ».sql_quote($id_document)) ;

    if (!$r) return ’’ ;

    $f = $r[’fichier’] ;

    if ($r[’distant’] == ’oui’)
    // on passe quand meme par get_spip_doc car un document distant
    // peut avoir une url locale suite a une rotation
    return get_spip_doc($f) ;

    // Si droit de voir tous les docs, pas seulement celui-ci
    // il est inutilement couteux de rajouter une protection

    $r = autoriser(’voir’, ’document’) ;

    if ($r AND $r !== ’htaccess’) return get_spip_doc($f) ;

    include_spip(’inc/securiser_action’) ;

    // cette action doit etre publique !
    return generer_url_action(’acceder_document’,
    $args . ($args ? « & » : ’’)
    . ’arg=’.$id_document
    . ($ancre ? « &ancre=$ancre » : ’’)
    . ’&cle=’ . calculer_cle_action($id_document.’,’.$f)
    . ’&file=’ . rawurlencode($f)
    ,false,true) ;

    En bidouillant la fonction generer_url_doc_compteur (en la remplaçant de la manière suivante), j’ai de nouveau accès aux documents, mais le compteur ne marche plus ...

    function generer_url_doc_compteur($id_document, $args=’’, $ancre=’’)

    include_spip(’inc/autoriser’) ;
    if (!autoriser(’voir’, ’document’, $id_document)) return ’’ ;

    $r = sql_fetsel(« fichier,distant », « spip_documents », « id_document= ».sql_quote($id_document)) ;

    if (!$r) return ’’ ;

    $f = $r[’fichier’] ;

    if ($r[’distant’] == ’oui’)
    // on passe quand meme par get_spip_doc car un document distant
    // peut avoir une url locale suite a une rotation
    return get_spip_doc($f) ;

    // Si droit de voir tous les docs, pas seulement celui-ci
    // il est inutilement couteux de rajouter une protection

    $r = autoriser(’voir’, ’document’) ;

    if ($r AND $r !== ’htaccess’) return get_spip_doc($f) ;

    include_spip(’inc/securiser_action’) ;

    // cette action doit etre publique !
    return generer_url_action(’acceder_document’,
    $args . ($args ? « & » : ’’)
    . ’arg=’.$id_document
    . ($ancre ? « &ancre=$ancre » : ’’)
    . ’&cle=’ . calculer_cle_action($id_document.’,’.$f)
    . ’&file=’ . rawurlencode($f)
    ,false,true) ;

    Y aurait-il une solution ?

    Merci d’avance.

    • Bonsoir,

      Effectivement, il y a une incompatibilité avec le plugin accès restreint...
      Il faut utiliser generer_url_document_dist() dans action_telecharger() : ce sera la fonction du plugin qui sera appelée (lorsqu’il est actif) et qui fera la redirection finale vers le fichier protégé.
      Normalement, cela devrait marcher avec la dernière version...

      @+

    • Pour ma part, j’ai eu ce problème avec la nouvelle version d’analyclick, je suis repassé à la version 52762 et je n’ai plus de problème

    • Quel genre de problème ?
      Quelle version de SPIP et avec quels plugins ?

      merci ;-)

    • Le problème était identique à celui de Vero. URL mal générée... J’ai rétrogradé à la version 52762 et ça fonctionne. J’utilise les plugins spip bonux, cfg, agenda 2.0, mediatheque, accès restreint, spip-liste, extra2,...

      Et spip 2.1.12 [18732]

      Faut vraiment noter tous les plugins ?

       ;-)

    • Je reviens à nouveau pour faire part du message d’erreur qui apparaît lorsque je clique sur le lien d’un document qui n’est pas dans le portfolio.

      Fatal error : Call to undefined function generer_url_document() in /var/www/vhosts/.../httpdocs/plugins/auto/analyclick/action/telecharger.php on line 43

    • La version installée du plugin est 58848... je suis à nouveau repassé à 52762
      Spip 2.1.13 [19292]
      Plugins installés : Accès restreint, médiathèque,...

    • Bonjour,

      Je n’arrive pas à reproduire le problème chez moi (SPIP 2.1.13 + accès restreint + médiathèque).
      Tout se passe normalement dans le portfolio ou pas...
      Normalement, si elle n’est pas surchargée par un plugin, la fonction generer_url_document() se trouve dans le fichier prive/urls/standard.php de SPIP qui est inclus juste avant, à la ligne 42.
      Pouvez-vous vérifier que dans vos plugins il ne traine pas un fichier standard.php qui modifierait ce comportement ?

      @+

    • Le seul fichier standard.php qui se trouve sur le serveur est logé dans ecrire/url/
      Je ne vois donc pas où pourrait se situer le problème ?? Mais la version antérieure fonctionne bien à priori.

    • Bonjour,

      A priori, je n’ai plus le problème avec la version : 0.1.0 [58884] sur un spip 2.1.12 [18732]

      Mais la protection des documents, via Accès restreint Version : 3.3.1 [58021], n’est pas effective.

      L’URL des documents, même protégés est : /spip.php ?action=telecharger&arg=id_document

    • Bonjour,

      @Eric : il y a peut-être un problème de cache (?)

      @Vero : l’URL reste la même mais normalement on n’a plus accès au document protégé si on n’a pas les droits... puisque le plugin demande à accès restreint de recalculer l’url (avec une clé qui dépend de la session).

      @+

    • Bien joué Jean-Marc !

      La solution : se déconnecter et se reconnecter...

      En effet, il ne suffit pas de vider le cache ni d’effacer le dossier tmp/ mais encore de se délogger...
      La mise-à-jour fonctionne bien ! Impeccable !

      Merci pour le temps passé à fignoler ce plugin !

      Avec le plugin mediatheque... cela me permet d’avoir un aperçu direct sur les fichiers « téléchargés ».

      Voir ici

      Eric

    Répondre à ce message

  • 2

    Bonjour,

    J’ai une erreure lors de du recalcule de la page après installation du plugin.

    « Erreur SQL 1064
    You have an error in your SQL syntax ; check the manual that corresponds to your MySQL server version for the right syntax to use near ’’ at line 3
    SELECT SUM(telechargement) AS c FROM spip_doc_compteurs WHERE id_document=  »

    Version de spip 2.1.12 [18732]

    est-il compatible avec cette version ?

    • Bonjour,

      Normalement, cela doit marcher avec la 2.1.x. Vérifiez que vous avez bien vidé le cache, sinon, désactiver et réctivez le plugin (sans le désinstaller).

      @+

    • C’était un bug .....

      merci

    Répondre à ce message

  • 2

    Le problème est que dans le plugin sarka ton astuce ne passe pas, enfin en tout cas pas sur mon site. Quelqu’un pourrait il m’aider ?

    • Pouvez-vous préciser ?

    • Désolé de ne pas avoir répondu plus tôt, j’ai réussi à régler le soucis, visiblement une incompatibilité entre deux plugins (je l’ai ai tous désinstallés puis réinstallés un à un, mais vu le nombre dont je disposais, impossible de dire précisément lequel posait problème...)

      Merci en tout cas :) !

    Répondre à ce message

  • 6

    Bonjour et merci pour ce chouette plugin :-)

    J’ai besoin d’un petit coup de pouce : je n’arrive pas à reproduire en partie publique, le top des documents les + téléchargés, visible dans les stats privées.
    En effet, on ne peut malheureusement pas classer ses résultats avec le critère {par compteur_telechargement}.

    Une piste ?

    • Bon, je poursuis mes investigations... pour établir un Top 3 des documents les plus téléchargés depuis le début, faut-il s’appuyer sur les variables #SET #GET et #ARRAY ? Ou y’a plus simple ?

      Merci pour vos suggestions :-)

    • Bonjour,

      Une boucle sur les compteurs de documents devrait marcher :

      <BOUCLE_stat(DOC_COMPTEURS){!par telechargement}{0,3}>
       #ID_DOCUMENT : #TELECHARGEMENT<br/>
      </BOUCLE_stat>

      et pour la semaine en cours (cela peut être utile) :

      [(#SET{date,[(#EVAL{ date("Y-m-d",strtotime("now")-7*24*3600); })]})]
      <BOUCLE_stat(DOC_COMPTEURS){date>#GET{date}}{!par telechargement}{0,3}>
       #ID_DOCUMENT : #TELECHARGEMENT<br/>
      </BOUCLE_stat>

      @+
      jmv

    • Merci pour votre réponse :-)

      Cependant la boucle proposée n’a pas le comportement attendu :
      le classement généré semble trier les documents par ordre décroissant de téléchargement maximal journalier et non par ordre décroissant de téléchargement total (depuis le début)...

      Que faire ?

    • Bonjour,

      Effectivement, le classement sur fait sur le compteur journalier...
      Je vais voir ce que je peut faire...

      @+

    • Bonjour,

      J’ai modifié le critère ’par’ dans la boucle téléchargement pour qu’il pointe sur le compteur global et non le compteur journalier.
      Dites-moi si la nouvelle version marche mieux ;-) et désolé pour le bug :(

      @+

    • Bonsoir,

      Ne vous excusez pas pour votre travail que vous mettez en partage !
      La modification semble tout à fait porter ses fruits : mon top téléchargement marche au poil !

      Bravo, et encore un grand merci :-)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom