Forum général.général Script pour mettre a jour les fortunes de bashfr et linuxfr

Posté par  .
Étiquettes : aucune
0
7
juil.
2006
Ce matin j'ai créé un script pour automatiquement mettre à jour les fortunes de bashfr.org et sam.linuxfr.org sur mon pc...

voila le script, n'hésitez pas à me signaler vos améliorations/changements!


cd /tmp
wget --directory-prefix=/tmp --referer=http://www.bashfr.org/ http://www.bashfr.org/bashfr_fortunes
grep -v "http://bashfr.org/" /tmp/bashfr_fortunes > /tmp/bash_fortunes2
iconv -f iso-8859-1 -t utf8 /tmp/bash_fortunes2 > /tmp/bashfr_fortunes
rm /tmp/bash_fortunes2
strfile -r /tmp/bashfr_fortunes /tmp/bashfr_fortunes.dat
cp /tmp/bashfr_fortunes.dat /usr/share/fortune/bashfr_fortunes.dat
cp /tmp/bashfr_fortunes /usr/share/fortune/bashfr_fortunes

wget --directory-prefix=/tmp --referer=http://sam.linuxfr.org/ http://sam.linuxfr.org/fortunes.txt
mv /tmp/fortunes.txt /tmp/linuxfr_fortunes
strfile -r /tmp/linuxfr_fortunes /tmp/linuxfr_fortunes.dat
cp /tmp/linuxfr_fortunes /usr/share/fortune/linuxfr_fortunes
cp /tmp/linuxfr_fortunes.dat /usr/share/fortune/linuxfr_fortunes.dat

rm /tmp/bashfr* /tmp/linuxfr*

  • # Plus concis

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

    Pour faire plus concis, sans message sur stdout (pratique pour croner), et également sans passage en écriture sur /tmp


    #!/bin/bash

    wget --referer=http://www.bashfr.org/ http://www.bashfr.org/bashfr_fortunes -o /dev/null -O - | grep -v "http://bashfr.org/" | iconv -f iso-8859-1 -t utf8 > /usr/share/fortune/bashfr_fortunes && strfile -s -r /usr/share/fortune/bashfr_fortunes /usr/share/fortune/bashfr_fortunes.dat

    wget --referer=http://sam.linuxfr.org/ http://sam.linuxfr.org/fortunes.txt -o /dev/null -O - | iconv -f iso-8859-1 -t utf8 > /usr/share/fortune/linuxfr_fortunes && strfile -s -r /usr/share/fortune/linuxfr_fortunes /usr/share/fortune/linuxfr_fortunes.dat
    • [^] # Re: Plus concis

      Posté par  . Évalué à 1.

      sympa ta modif, mais il ne faut pas transformer en utf8 le second fichier sinon tu te retrouve avec des signes bizarres...

      J'ai essayé de modifier ton script de la même manière, c'est à dire, en supprimant iconv mais impossible de trouver une manière sans utiliser de fichiers temporaires...

      A propos, petite question dis moi comment trouver le charset d'un fichier ?

      MErci!
      • [^] # Re: Plus concis

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

        Alors sans utiliser iconv, et sans fichiers temporaires, c'est le paramètre -O de wget qui importe, puisqu'il permet de spécifier l'O(utput). Ainsi, avec un -O /usr/share/fortune/linuxfr_fortunes tu t'en sors. J'utilisais le paramètre -O - indiquant que je voulais obtenir la sortie du fichier sur stdout, pour ensuite l'envoyer via un pipe dans iconv.

        Ce qui donne donc pour le 2ème :
        wget --referer=http://sam.linuxfr.org/ http://sam.linuxfr.org/fortunes.txt -o /dev/null -O /usr/share/fortune/linuxfr_fortunes && strfile -s -r /usr/share/fortune/linuxfr_fortunes /usr/share/fortune/linuxfr_fortunes.dat

        Pour ce qui est de trouver le charset d'un fichier, la commande file peut parfois rendre service, toutefois, elle n'est pas garantie :)
        En effet, à moins d'une déclaration explicite (comme en XHTML par exemple avec l'encoding déclaré en début de document), l'interprétation du charset dépend de la facon dont chacun s'attend à le trouver. Ce qui peut conduire à des erreurs d'interprétation lorsque le programme essaye de "deviner" l'encodage utilisé (voir à ce sujet le "bug" notepad signalé dans http://linuxfr.org/~dup/21898.html )
        • [^] # Re: Plus concis

          Posté par  . Évalué à 1.

          je te remercie ;)

          ca marche nickel!
    • [^] # moins charger le serveur

      Posté par  . Évalué à 2.

      Il doit être possible de faire passer le fichier à strfile directement par stdin :
      | strfile -s -r - /usr/share/fortune/bashfr_fortunes.dat

      Autres idées pour éviter de surcharger inutilement le serveur pour télécharger un fichier n'ayant pas été modifié :

      - si on suppose qu'il n'y a que de ajouts en fin de fichier, utiliser wget -c, ça ne télécharger que les nouvelles lignes

      - sinon, utiliser l'option -S de wget pour récupérer uniquement les entêtes HTTP et ainsi la date de dernière modification :
      par exemple pour bashfr :
      4 Last-Modified: Mon, 03 Jul 2006 21:50:14 GMT
      et se baser sur cette date pour décider de télécharger ou pas le fichier.

      Je n'ai pas trouvé d'option dans wget pour comparer cette date fournie par le serveur http avec la date du fichier local et décider en fonction => il faut le faire soi-même
      • [^] # Re: moins charger le serveur

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

        Il doit être possible de faire passer le fichier à strfile directement par stdin :
        | strfile -s -r - /usr/share/fortune/bashfr_fortunes.dat


        Non, strfile est tout pourri, car il n'accepte pas de lire sur stdin.


        Autres idées pour éviter de surcharger inutilement le serveur pour télécharger un fichier n'ayant pas été modifié :

        - si on suppose qu'il n'y a que de ajouts en fin de fichier, utiliser wget -c, ça ne télécharger que les nouvelles lignes

        - sinon, utiliser l'option -S de wget pour récupérer uniquement les entêtes HTTP et ainsi la date de dernière modification :
        par exemple pour bashfr :
        4 Last-Modified: Mon, 03 Jul 2006 21:50:14 GMT
        et se baser sur cette date pour décider de télécharger ou pas le fichier.

        Je n'ai pas trouvé d'option dans wget pour comparer cette date fournie par le serveur http avec la date du fichier local et décider en fonction => il faut le faire soi-même


        Ou sinon, en contournant le bug de wget lors de l'utilisation simultanée de -N et -O, ca donnerait pour le script :


        #!/bin/bash

        cd /usr/share/fortune/

        wget -o /dev/null -N --referer=http://www.bashfr.org/ http://www.bashfr.org/bashfr_fortunes
        grep -v "http://bashfr.org/" /usr/share/fortune/bashfr_fortunes | iconv -f iso-8859-1 -t utf8 > /usr/share/fortune/bashfr_fortunes.clean && strfile -s -r /usr/share/fortune/bashfr_fortunes.clean /usr/share/fortune/bashfr_fortunes.dat

        wget -o /dev/null -N --referer=http://sam.linuxfr.org/ http://sam.linuxfr.org/fortunes.txt && strfile -s -r /usr/share/fortune/fortunes.txt /usr/share/fortune/linuxfr_fortunes.dat


        Ainsi (on peut le voir en enlevant les -o /dev/null et en lançant plusieurs fois de suite le script), les fichiers ne sont récupérés que s'ils ont changé sur le site ==> Moins de charge :)
  • # sans fichier temporaire saymieu

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

    $ wget -O - --referer=http://www.bashfr.org/ http://www.bashfr.org/bashfr_fortunes | grep -v '^-- http://bashfr.org/?' b | iconv -f iso-8859-1 -t utf8 > /usr/share/fortune/bashfr_fortunes
    Mais les vrais amateurs de fortunes savent bien que bashfr ne vaut rien.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

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