Updates-warner : pour être alerté d’une modification de ressource Web

Posté par  . Édité par Davy Defaud, ZeroHeure, palm123, claudex et bubar🦥. Modéré par claudex. Licence CC By‑SA.
Étiquettes :
31
9
oct.
2017
Gestion de versions

Je vous présente aujour’hui un de mes projets personnels : Updates-warner.

C’est un logiciel libre (GPL v3), écrit en C, d’environ 9 250 lignes de code (environ trois mois de dev’, sur mon temps libre). Ce projet est né suite à un besoin que j’ai de suivre certains projets pour des questions de sécurité dans mon boulot. La première esquisse était un script shell que je lançais manuellement tous les jours. Par flemme, j’ai donc créé ce logiciel qui est beaucoup plus beau, pratique et multi‐tâches ! Et j’ai décidé de le partager, j’espère que vous le trouverez tout aussi pratique que moi !

C’est un logiciel qui permet d’être alerté sur la mise à jour d’une ressource Web publique, par exemple :

  • être alerté sur la sortie d’une nouvelle vidéo d’une chaîne YouTube (pas de compte requis) ;
  • être alerté sur la nouvelle version d’une bibliothèque de développement (pratique pour mettre à jour en cas de problème de sécurité) ;
  • être alerté heure par heure de l’avancée de votre financement participatif préféré (certains sauront de quoi je parle ;)) ;
  • être alerté de la sortie d’une nouvelle version d’un logiciel ou d’un jeu dont votre distribution n’a pas intégré cette dernière version ;
  • etc.

Attention, que l’on soit clair, ce n’est pas du temps réel, la mise à jour la plus rapide est fixée à 60 minutes, mais 24 h me paraît être globalement plus adapté à la plupart des situations, mettre un temps plus court serait clairement du gâchis de bande passante.

Configuration

Quelques petites fonctionnalités du logiciel

  • il permet d’être toujours au premier plan ou en arrière‐plan sur le bureau ;
  • si l’icône de la zone de notification est activée, le logiciel peut être caché ou affiché avec un clic gauche ;
  • si l’icône de la zone de notification est activée, l’icône change et clignote en fonction de l’alerte ;
  • il permet de lancer rapidement l’application concernée avec un clic droit ;
  • il permet d’accéder rapidement au site Web avec un clic droit ;
  • il permet de rafraîchir le numéro de version locale ou officielle rapidement avec un clic droit ;
  • la couleur et l’opacité du fond peuvent être choisis pour être plus en accord avec votre thème ;
  • prise en charge d’un fichier de langage (actuellement, le logiciel est en anglais et en français sans fichier externe) ;
  • comparaison de la version officielle avec la version locale (manuelle ou automatiquement récupérée) ;
  • le logiciel a son propre user‐agent : Updates-warner ce qui permet aux sites Web de fournir un contenu adapté si jamais ce logiciel rencontre un succès phénoménal (Eh, chut ! Pas de remarques désagréables ! Laissez‐moi rêver !).

Ce qu’il faut savoir pour créer un « watcher »

(ce qui va régulièrement récupérer la version officielle)

  • la récupération de la version officielle se fait, globalement, avec les pages Web qui sont analysées ;
  • l’interface graphique est bourrée de bulles d’aide pour vous aider à mieux comprendre la fonctionnalité ;
  • pour configurer un watcher, il faut donc mettre les mains dans le HTML et regarder quel élément peut être utilisé pour en soutirer la version qui sera modifiée à chaque mise à jour ; ce qui reste assez intuitif si vous avez l’habitude de grep et cut ;
  • un fichier de configuration par défaut est proposé, vous pourrez voir comment faire un watcher manuellement dans ce fichier ou alors dans l’interface graphique ;
  • les images à utiliser doivent faire 26 × 26 pixels, sinon le rendu ne sera pas tip top ;
  • les pages HTML téléchargées sont sauvegardées dans le dossier de cache (par défaut ~/.cache/updates-warner/).

Ajout d’un watcher

Petite remarque : je mets à disposition le code source, mais l’installeur est plutôt fait pour fonctionner avec les dérivées de Debian (j’ai prévu d’améliorer le script pour d’autres distributions — dérivées de Slackware et Red Hat).

Contactez‐moi

N’hésitez pas à me contacter en cas :
- d’éventuelles idées, bogues ou choses à améliorer (faites un tour dans la partie Ajout futurs auparavant ;-)) ;
- de proposition de fichier de langue autres que français et anglais ;
- d’erreurs de compilation, d’installation ;
- d’erreurs d’orthographe (anglais ou français d’ailleurs).

Un wiki arrivera plus tard sur le site Web qui est tout neuf et encore en cours de construction…

Aller plus loin

  • # Pourquoi pas

    Posté par  . Évalué à 7.

    Effectivement ça pourrait être intéressant, parce que les annonces du type « pour savoir si quelque chose est publié, il faut nous suivre sur twitter » me sont insupportables. Cependant pour ma part je suis plusieurs sites web, projets et chaines YouTube/Dailymotion, et jusqu'à présent j'ai toujours trouvé un flux RSS (même s'il faut souvent fouiller pour le trouver).

    Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr

    • [^] # Re: Pourquoi pas

      Posté par  . Évalué à 9.

      Accessoirement, j'aurais plutôt utilisé notifier ou alerter, plutôt que warner dans le nom du logiciel, je trouve que ça sonne étrange.

      Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr

      • [^] # Re: Pourquoi pas

        Posté par  . Évalué à 1.

        Le nom est passé par plusieurs phase (Warn-Updates, Update-Alerts, …. et finalement, j'ai choisi 'Updates-warner', même si 'warn + er' n'existe pas mais c'est pas grave, c'est un nom de logiciel, pas une description

      • [^] # Re: Pourquoi pas

        Posté par  (site web personnel) . Évalué à 2.

        Oui enfin c'est une question de mots mais la finalité ne reste-elle pas sensiblement la même ?

    • [^] # Re: Pourquoi pas

      Posté par  . Évalué à -1.

      Accessoirement, j'aurais plutôt utilisé notifier ou alerter, plutôt que warner dans le nom du logiciel, je trouve que ça sonne étrange.

      Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr

    • [^] # Re: Pourquoi pas

      Posté par  (Mastodon) . Évalué à 3.

      Je pense qu'il y a d'autres utilité, comme vérifier si le site web qu'on administre a été piraté.

      Mais la dépêche manque en effet d'un peu de contexte.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Pourquoi pas

        Posté par  . Évalué à 1.

        bah… le contexte, je l'ai donné, c'est un besoin que j'ai résolu avec un script shell, qui s'est ensuite transformé en interface graphique, c'est mon outil que je propose à tous.
        Et d'ailleurs, je n'avais pas pensé a ce genre d'utilisation, mais du coup ce serai plus intéressant de descendre le minuteur de 60 min à 1 sec et que chaque watcher ai son propre thread pour ce genre de surveillance. (ce qui n'est pas le cas actuellement, car mon contexte d'utilisation est dans un cadre beaucoup moins critique)

    • [^] # Re: Pourquoi pas

      Posté par  . Évalué à 1.

      J'aime bien les flux RSS, mais j'y vois 2 inconvénients, qui me gênent:
      - Je ne reçoit pas pas forcement l'info qui m'intéresse, c'est le gestionnaire du flux qui m’envoie l'info qu'il veut
      - énormément de site et ressources n'ont pas de flux RSS associés

    • [^] # Re: Pourquoi pas

      Posté par  . Évalué à 2.

      Je me suis retrouvée régulièrement confrontée à ce genre de problème sur les sites d'annonces d'emploi qui ne proposent presque jamais de flux RSS ou atom ; un tel outil m'aurait été bien utile !

  • # forge logiciel / gestionnaire de ticket

    Posté par  . Évalué à 5.

    Le site est un peu «à l'ancienne», il serait pas mal que tu mettes en place un forge logiciel tel que Git(lab|hub) pour que tes utilisateur puisse contribuer et te faire des remontés de bug.

    Sinon ça m'intéresse en effet, je ne suis pas très fan d'ouvrir un compte pour juste être prévenu d'une nouvelle.

    • [^] # Re: forge logiciel / gestionnaire de ticket

      Posté par  . Évalué à 1.

      Pour le site web, je pensais faire au départ ce genre de site :
      - http://valgrind.org
      ou
      - https://www.sudo.ws
      Simple techniquement, mais moche (notion totalement subjective)
      N'étant pas développeur de site web mais développeur C, j'ai quand même décidé de faire un site un peu moins moche, donc un peu plus technique (php + CSS = un peu de responsive design).
      N'ayant pas envie de passer ma vie à bosser sur le site web (c'est pas mon truc), il est uniquement là pour la distribution de mes projets (+quelques infos)

  • # Sympa

    Posté par  . Évalué à 1.

    Bien que "sans grande utilité" moi aussi j'ai trifouillé :) du :

    #!/bin/bash
    raised=`curl -sL "www.puri.sm/shop/librem-5"| tail -c +34833 | head -c 10 | tail -c 9`
    date=`date +"%y-%m-%d-%T"`
    prev_raised=`sqlite3 librem5.db "select * from log order by date desc;" | head -c 9`
    if [ "$prev_raised" != "$raised" ]
    then
    sqlite3 librem5.db "insert into log values (\"$raised\", \"$date\");"
    fi
    

    +cron

    Là c'est un autre niveau bien plus classe, mais tu restes en mode polling, ça existe pas l'interrupt (hors RSS)?

    • [^] # Re: Sympa

      Posté par  . Évalué à 3.

      mais tu restes en mode polling, ça existe pas l'interrupt (hors RSS)?

      Pour moi, le RSS, ça reste du "polling", j'ai faux ?

      • [^] # Re: Sympa

        Posté par  . Évalué à 1. Dernière modification le 10 octobre 2017 à 17:09.

        Ah non, c'est moi qui connait rien au RSS :)

        • [^] # Re: Sympa

          Posté par  . Évalué à 1.

          Faudrait un RSS (ou équivalent) mais via websocket: du coup, il suffirait de se connecter à un canal et d'attendre le push du serveur.

          • [^] # Re: Sympa

            Posté par  . Évalué à 0.

            Je comprends pas bien, si le serveur pousse et l'agrégateur de contenu RSS tire, l'info est où entre les deux ? :)

            • [^] # Re: Sympa

              Posté par  . Évalué à 0.

              je parlais du format RSS (XML normalisé) et non pas du fonctionnement des agrégateurs de flux RSS qui lui fait bien du polling sur le protocole HTTP mais pourrais changer leur comportement si ils passaient par du websocket.

              • [^] # Re: Sympa

                Posté par  . Évalué à 5.

                Peu d’intérêt. Maintenir la connexion via websocket va charger inutilement le serveur, beaucoup plus que pour un raffraichissement toutes les heures (ou même que tous les quart d’heure).

                Les websockets, c’est plutôt fait pour les notifications « temps-réel », quand tu trouves que 5 secondes d’attente c’est trop long. Pas le cas d’utilisation du RSS.

                Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0

                • [^] # Re: Sympa

                  Posté par  (site web personnel) . Évalué à 2.

                  Une connexion tcp ou websockets qui n'a pas de traffic, ne consomme rien en terme de ressources. C'est juste une entrée dans une table de connections ouvertes sur le serveur et sur le client, c'est tout.

                  Après, si les implems derrière font n'importe quoi, c'est un autre problème.

    • [^] # Re: Sympa

      Posté par  . Évalué à 4.

      Le push en HTTP n'est pas complètement impossible mais nécessite une surcouche tehcnique type BOSH, long polling, websocket, plutôt consommatrice pour le serveur.
      Et si tu surveilles des 100aines de sites, ça devient compliqué aussi pour le client.
      Et finalement quel intérêt d'être informé à la seconde d'une nouvelle version ?
      Un poll par jour doit satisfaire la plupart des usages.

      Sinon on s'approche plus d'un usage de supervision. Et là on change de solution : IMAP, IRC, XMPP, SMS, que sais-je.

  • # Équivalent sous windows

    Posté par  . Évalué à 1.

    Ça me fait beaucoup penser à un programme (Ketarin) que j'utilisais sous Windows, qui pouvait de faire à peu près la même chose. Il me permettait de vérifier les mises à jour d'un tas de programmes et de les télécharger en un clic. Pratique.
    Peut-être qu'il contient quelques idées que tu pourrais piocher.

    • [^] # Re: Équivalent sous windows

      Posté par  . Évalué à 1.

      Merci, je connaissais pas, je vais jeter un tit coup d'oeil :)
      J'ai prévu, plus tard, ce genre de fonctionnalité, mais c'est bcp plus complexe avec Linux car beaucoup de mécanisme différents à prendre en compte

  • # Anitya fait en partie le travail :)

    Posté par  (site web personnel) . Évalué à 8.

    Il y a le programme Anitya, qui fut développé pour les besoins de Fedora qui fait une partie du programme que tu as fait.

    On peut consulter les données et configurer des alertes sur https://release-monitoring.org/

    Son but est de surveiller les paquets / projets logiciels des distributions, pour alerter si une mise à jour a été publiée par le projet officiel afin que les distributions et autres dépôts puissent réagir. Ce n'est pas limité à Fedora.

    Exemples :
    https://release-monitoring.org/distro/Debian/
    https://release-monitoring.org/project/5830/

    C'est assez pratique pour les mainteneurs d'un paquet, ou pour quelqu'un qui souhaite suivre un projet en particulier.

    • [^] # Re: Anitya fait en partie le travail :)

      Posté par  . Évalué à 2.

      C’est vraiment super bien comme truc.

      Par contre créer un compte sur FAS et configurer les notifications/filtres c’est laborieux. Ça serait cool de pouvoir suivre des projets en particulier d’un simple clique.

      • [^] # Re: Anitya fait en partie le travail :)

        Posté par  (site web personnel) . Évalué à 3.

        Si tu utilises le bouton login en haut des pages, normalement tu devrais pouvoir utiliser d'autres fournisseurs OpenID, le compte FAS n'est pas nécessaire normalement.

        J'avoue qu'ayant déjà un compte FAS, je n'ai pas testé les autres possibilités.

  • # Youtube

    Posté par  . Évalué à 1.

    Comment on fait quand on a été notifiée d'une nouvelle vidéo et qu'on la regarder pour dire au logiciel de plus me notifier cette vidéo ?

    • [^] # Re: Youtube

      Posté par  . Évalué à 1.

      tu va dans la liste des watchers, tu clique sur celui qui t’intéresse, puis "modifier" et a coté de la version locale tu a un bouton contenant la nouvelle version (ou dans ton cas le nouveau titre) avec une flèche "<=" qui te permet de mettre la version officiel à la place de la version local

  • # Ajouter des catégorie

    Posté par  . Évalué à 0.

    Honnêtement l'application est très cool ! Mais je pense qu'il faudrait pouvoir créée des catégories pour triée un peux tout cela. Pourquoi pas un système de boite ?

    • [^] # Re: Ajouter des catégorie

      Posté par  . Évalué à 0. Dernière modification le 10 octobre 2017 à 20:00.

      Qu'entends tu exactement pas un système de boite ? Sinon j'avais pensé à ajouter la possibilité d'utiliser plusieurs fichiers de configuration qui ouvrirai plusieurs fenêtres (donc ce serai à toi de faire tes catégories par fichier de conf/fenêtre)

    • [^] # Re: Ajouter des catégorie

      Posté par  . Évalué à 0.

      boite == tag ?

  • # Huginn

    Posté par  . Évalué à 3.

    Ca me fais penser à ce projet qui à l'air de jouer dans la même cour.
    https://github.com/huginn/huginn

    Allez tous vous faire spéculer.

    • [^] # Re: Huginn

      Posté par  . Évalué à 2.

      Ça a l'air chiadé.
      Par contre RoR + node.js :(
      Heureusement, ils distribuent sous forme de container.

      Ça m'a rappelé trigger-happy, présenté ici

  • # BeautifulSoup

    Posté par  . Évalué à 0.

    Ca me fait penser à https://www.crummy.com/software/BeautifulSoup/ - https://fr.wikipedia.org/wiki/Beautiful_Soup .

    Il fallait être courageux pour se lancer dans ce genre de programme avec du C

    • [^] # Re: BeautifulSoup

      Posté par  . Évalué à 2. Dernière modification le 11 octobre 2017 à 17:45.

      Beautiful_Soup est une bibliothèque logicielle qui permet de corriger un document HTML mal formé pour qu'il apparaisse bien formé et puisse être traité par un parseur XML.

      Et c'est là une faiblesse du logiciel proposé je trouve. Avoir un document XML permet d'utiliser XPath qui est beaucoup plus efficace qu'une regexp pour aller chercher de l'information dans un document structuré.

      Pour ma part, j'ai pris mes habitues avec lxml.

      • [^] # Re: BeautifulSoup

        Posté par  . Évalué à 0.

        "Ca me fait penser" c'était juste pour l'ajouter à la liste des "Ca me fait penser" des précédents commentaires. Si non, effectivement, d'un point de vue technique des solutions comme bs ou lxml paraissent plus appropriées que des:

        if( !Line_contains( &dest->Mem[bkp], *pos - bkp, watcher->LocalContains, length ))

        Encore une fois, il fallait être vraiment courageux pour écrire ca en C ;) pour ne pas dire "tu as dû vraiment te faire chier !"

        • [^] # Re: BeautifulSoup

          Posté par  . Évalué à 0.

          Au contraire, je me suis bien amusé ! Et c'est vraiment pas la partie qui m'a pris le plus de temps.

      • [^] # Re: BeautifulSoup

        Posté par  . Évalué à 1.

        Intéressant comme point de vue, ce que tu appelles une faiblesse, j'appelle ça une force : Mon logiciel n'est pas cloisonné aux ressources XML.
        D'ailleurs, je compte affiner/améliorer les possibilités de découpages pour la récupération de données, car actuellement, c'est trop limité.

        • [^] # Re: BeautifulSoup

          Posté par  . Évalué à 2.

          Alors disons que l'un n'empêche pas l'autre.
          L'écrasante majorité du contenu sera du HTML (donc du XML) et XPath est très puissant.
          Cela n'exclut pas les regex voire un combinaison des deux : une regex dans une xpath.

        • [^] # Re: BeautifulSoup

          Posté par  . Évalué à 1.

          Par exemple si je veux utiliser ton logiciel pour "watcher" une annonce leboncoin ou une vidéo YouTube. Et bien en l'état cela me parait impossible.

          Le HTML généré par leboncoin (et comme 90% des autres sites internet du moment) ne peut pas se contenter d'un :

          "Dans le documents HTML, la version est récupérable à la ligne n° x" ou "dans le champ n° x coupé par …"

          Il suffit qu'une pub, un bandeau dynamique, un commentaire ou autre s'ajoute dans la page et ton algo pour chercher dans la page est faux.

          C'est pour ca qu'il est quand même préférable d'utiliser un parser xml (il en existe en C) ou mieux des framwork comme https://scrapy.org/ qui ont déjà prévu certain cas pratique que tu/nous aurions pas forcement implémenté du premier coup.

          • [^] # Re: BeautifulSoup

            Posté par  . Évalué à 1. Dernière modification le 12 octobre 2017 à 00:32.

            Mmm tu n'a pas bien compris comment créer un watcher…
            Mais j'assume totalement le fait que mon interface ne soit pas super user-friendly (j'ai prévu des trucs pour améliorer ça)

            Contrairement à ce que tu dit sur youtube, tu peux récupérer très facilement :
            - le nombre de vues : 1er ligne avec watch-view-count
            - le nombre de pousses positifs : 1er ligne avec yt-uix-button-content
            - le nombre de pousses négatifs : 3eme ligne avec yt-uix-button-content
            - le nombre d'abonnées : 1er ligne avec yt-subscriber-count
            - Dernière vidéo de la chaine ajoutée : 1er ligne avec <h3 class="yt-lockup-title (j'ai actuellement plusieurs watchers fonctionnant très bien pour m'avertir de l'ajout de vidéos sur plusieurs chaines youtube)

            Pour le bon coin, faire un watcher sur une annonce, je vois pas trop l’intérêt vu que c'est plutôt statique, à part le prix peut-être ? (récupérable avec la 1ère ligne contenant 'prix : "')
            Par contre, un watcher pour l'ajout d'une annonce selon une recherche précise se fait très bien avec la 1ère ligne contenant 'class="list_item clearfix trackable"'

            Si tu te base sur les bonnes données, les pub n'influent en rien, les bandeaux dynamiques n'influent en rien, les commentaires n'influent en rien.
            Les seuls choses qui rendrai l'aglo faux, c'est le changement total d'interface du site web, mais quelque soit le parseur utilisé, quelque soit l'algo, quelque soit la lib utilisée, tu devra refaire ton watcher

            Et je ne suis toujours pas convaincu que me limiter au XML, alors que je peux très facilement faire plus, est une bonne idée.

            • [^] # Re: BeautifulSoup

              Posté par  . Évalué à 1.

              Je pense qu'il a bien compris.
              Et qu'il essaye de t'expliquer le même point que moi : un xpath est bien plus simple est fiable pour récupérer un contenu dans un arbre (xml) qu'une regexp qui sera plus adapté à un fichier ligne à ligne (log).
              D'abord et avant tout parce que ces deux outils ont été conçus pour leur domaine respectif.

              • [^] # Re: BeautifulSoup

                Posté par  . Évalué à 0.

                xpath plus simple : permet moi d'en douter.
                Fiable : j'ai envie de répondre : ça dépend.
                Dans le cadre du soft "update-warners" qui ne fait pas vraiment du scraping poussé mais juste la récupération d'un motif de chaine, (c'est pas une regex d'ailleurs) je trouve ça plutôt malin et xpath me semble surfait.
                Je n'arrive pas à trouver de cas ou "soit disant" xpath serait plus fiable.
                Pour moi, xpath c'est bien sur du xml normalisé (via xsl) mais pas pour du html ou l'arbo peut vite changer du tout au tout.

                • [^] # Re: BeautifulSoup

                  Posté par  . Évalué à 2.

                  xml normalisé (via xsl)

                  Et bah là c'est du charabia pour moi. Ce qui pourrait expliquer ta réticence envers xpath.

                  motif de chaine, […] je trouve ça plutôt malin et xpath me semble surfait.

                  Tu es maître de ton design.
                  Si il te convient, c'est parfait.
                  J'ai pour ma part fait énormément de scrapping web et faisait simplement part de mon expérience.

  • # Des goodies tout fait

    Posté par  (site web personnel) . Évalué à 6.

    Je sais déjà ce que tu peux offrir comme goodies:

    Des brosses, pour dire "c'est une updates-warner brosse".

  • # pas de package binaire

    Posté par  . Évalué à 0.

    Bonjour,
    Je voulais tester updates-warner, mais je n'ai pas l'intention d'installer 70Mo de package de développement gtk sur ma machine… Donc j'attendrai. C'est dommage !

    • [^] # Re: pas de package binaire

      Posté par  . Évalué à 1.

      N'ayant pas encore les connaissances pour créer des packages (.deb, .rpm), je ne peux pour l'instant proposer que la compilation des sources
      Les paquets que tu installes uniquement pour le développement ne sont pas nécessaire après l'installation et peuvent donc être désinstallés après coup

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.