Auteur Sujet: [Linux] Script pour obtenir ses crédits et son classement dans l'AF  (Lu 2255 fois)

0 Membres et 1 Invité sur ce sujet

erdnaxeli

  • Messages: 418
  • Boinc'eur Confirmé
  • ***
  •   
Bonjour,

Voici un petit script qui permet à partir du site de Seb d'obtenir ses crédits et son classement dans l'AF. Ça écrit le tout dans un fichier. On peut s'en servir pour l'afficher dans conky, dans une barre dzen, en signature de ses mails, etc.

#!/bin/bash
# -*- coding: UTF8 -*-

file=`mktemp`
cpid=votre cpid

wget http://statseb.boinc-af.org/xml/membre.py?cpid=$cpid -O $file || exit

credits=`grep total $file | line | sed 's/<total>\(.*\)<\/total>/\1/' | sed 's/\(.*\)\(...\)\(...\)/\1.\2.\3/'`
rang=`grep rang $file | line | sed 's/<rang>\(.*\)<\/rang>/\1/'`
echo "$credits ($rang)" > là/où/vous/voulez

rm $file

Avec une petite ligne à ajouter dans le crontab pour exécuter le script toute les heures :

*/30    *   *   *   *   sh adresse/du/script.sh
Attention : si votre crédit fait 6 chiffres ou mois, remplacez sed 's/\(.*\)\(...\)\(...\)/\1.\2.\3/'` par sed 's/\(.*\)\(...\)/\1.\2/' (et si votre crédit fait moins de 4 chiffres, crunchez !).

Le résultat est comme ceci :
Citer
2.499.819 (539)

[AF>Libristes>Jip]Augure

  • Méchant modo
  • Messages: 4701
  • Boinc'eur devant l'éternel
  • ******
  •   
nice !  :jap:

bon j'ai 6chiffres donc cela ira ! :D
>>

kasur

  • Messages: 2998
  • Boinc'eur devant l'éternel
  • *****
  •   
Merci !  :smak:

et 194 SETI@home classic workunits (4 764 hours) :p Toutes les Minivilles AF

[AF>Libristes] Dudumomo

  • Messages: 5829
  • Boinc'eur devant l'éternel
  • *****
  •   
C'est sympa !  :jap: :jap:
Va falloir que tu fasses un article sur le portail de la MT toi !!!!
News & Tutorial on how to host your server: http://freedif.org

jip

  • Invité
Bonjour,

Voici un petit script qui permet à partir du site de Seb d'obtenir ses crédits et son classement dans l'AF. Ça écrit le tout dans un fichier. On peut s'en servir pour l'afficher dans conky, dans une barre dzen, en signature de ses mails, etc.

#!/bin/bash
# -*- coding: UTF8 -*-

file=`mktemp`
cpid=votre cpid

wget http://statseb.boinc-af.org/xml/membre.py?cpid=$cpid -O $file || exit

credits=`grep total $file | line | sed 's/<total>\(.*\)<\/total>/\1/' | sed 's/\(.*\)\(...\)\(...\)/\1.\2.\3/'`
rang=`grep rang $file | line | sed 's/<rang>\(.*\)<\/rang>/\1/'`
echo "$credits ($rang)" > là/où/vous/voulez

rm $file

Avec une petite ligne à ajouter dans le crontab pour exécuter le script toute les heures :

*/30    *   *   *   *   sh adresse/du/script.sh
Attention : si votre crédit fait 6 chiffres ou mois, remplacez sed 's/\(.*\)\(...\)\(...\)/\1.\2.\3/'` par sed 's/\(.*\)\(...\)/\1.\2/' (et si votre crédit fait moins de 4 chiffres, crunchez !).

Le résultat est comme ceci :

bien vu. :jap:

on peut aussi jouer avec les substitutions de variable tout en évitant de charger le fichier xml en le stockant, et avec le printf (ou un fprintf si on veut le résultat dans un fichier) pour éviter le pb des cas de longueur. ;)

un truc dans ce genre par exemple :

#!/bin/bash

timeout=5
cpid="votre_cpid"

xmldatas=`wget --timeout=${timeout} -q -O - "http://statseb.boinc-af.org/xml/membre.py?cpid=${cpid}"`

total=${xmldatas#*<total>}
total=${total%%</total>*}

rang=${xmldatas#*<rang>}
rang=${rang%%</rang>*}

rac=${xmldatas#*<rac>}
rac=${rac%%</rac>*}

echo `printf "Rang AF : %d , Total des projets : %'d , RAC : %'d" ${rang} ${total} ${rac}`
« Modifié: 29 juillet 2011 à 18:20 par jip »

erdnaxeli

  • Messages: 418
  • Boinc'eur Confirmé
  • ***
  •   
C'est carrément mieux. Faut vraiment que j'apprenne à me servir de tous cet machins (substitutions de variables là …).

[AF>Libristes] nico8313

  • Messages: 7863
  • Boinc'eur devant l'éternel
  • *****
  •   
Sympa ça merci  :jap: :jap: :jap:

jip

  • Invité
Plus complet, une variantes avec des boucles pour les autres infos :

#!/bin/bash

timeout=5
cpid="votre_cpid"

xmldatas=`wget --timeout=${timeout} -q -O - "http://statseb.boinc-af.org/xml/membre.py?cpid=${cpid}"`

total=${xmldatas#*<total>}
total=${total%%</total>*}

rang=${xmldatas#*<rang>}
rang=${rang%%</rang>*}

rac=${xmldatas#*<rac>}
rac=${rac%%</rac>*}

echo ""
echo ""
echo "==================================================================="
echo "  Général AF"
echo "-------------------------------------------------------------------"
echo `printf "Rang AF : %d , Total des projets : %'d , RAC : %'d" ${rang} ${total} ${rac}`
echo "==================================================================="

projectdatas="${xmldatas}"


projectdatas="${projectdatas#*<badges>}"
projectdatas="${projectdatas%%</badges>*}"

projectdatas="${projectdatas%</badge>*}</badge>"

echo ""
echo "-------------------------------------------------------------------"
echo "  Badges"
echo "-------------------------------------------------------------------"


while [ -n "${projectdatas}" ]
do

    projectdatas="${projectdatas#*<badge>}"

    projectname="${projectdatas#*<projet>}"
    projectname="${projectname%%</projet>*}"

    subproject="${projectdatas#*<sous-projet>}"
    subproject="${subproject%%</sous-projet>*}"

    color="${projectdatas#*<couleur>}"
    color="${color%%</couleur>*}"

    echo `printf "Nom : %s, Sous-projet : %s , Couleur : %s" "${projectname}" "${subproject}" "${color}"`

    projectdatas="${projectdatas#*</badge>}"

done

projectdatas="${xmldatas}"

projectdatas="${projectdatas#*</badges>}"


projectdatas="${projectdatas%</projet>*}</projet>"

echo ""
echo "-------------------------------------------------------------------"
echo "  Projets"
echo "-------------------------------------------------------------------"

while [ -n "${projectdatas}" ]
do

    projectdatas="${projectdatas#*<projet>}"

    projectname="${projectdatas#*<nom>}"
    projectname="${projectname%%</nom>*}"

    total="${projectdatas#*<total>}"
    total="${total%%</total>*}"

    rang="${projectdatas#*<rang>}"
    rang="${rang%%</rang>*}"

    rac="${projectdatas#*<rac>}"
    rac="${rac%%</rac>*}"

    echo `printf "Nom : %s, Rang : %d , Total des projets : %'d , RAC : %'d" "${projectname}" "${rang}" "${total}" "${rac}"`

    projectdatas="${projectdatas#*</projet>}"

done

echo "==================================================================="
echo ""
echo ""


une fois ces données extraites dans le script, vous pouvez faire un peu ce que voulez en remplaçant les "echo" et "printf" par autre chose ...

jip

  • Invité
Ah aussi en installant un processeur xsl (par exemple mon préféré : xsltproc, dispo sous GNU/Linux et Windows) ou avec un navigateur (FF, IE, Chrome) qui le supporte on peut faire des petites choses pas mal pour ceux que ça intéresse.

J'avais publié un petit exercice de "style" xsl, y'a un certain temps, là : http://libristes.boinc-af.net/telechargements/file/14-xsl-exemple-de-fusion-de-statistiques-boinc.html

On pourrait faire ce qui est fait là en bash en assez simple via des feuilles xsl pour transformation en texte, html, sql, autre xml, etc ...

Un processeur xsl pour traiter du xml, c'est un peut fait pour ça d'ailleurs ...
« Modifié: 29 juillet 2011 à 21:23 par jip »

jip

  • Invité
Tiens, vite fait avec une feuille xsl nommée "my_score_af.xsl", par exemple comme ça :

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="text" omit-xml-declaration="no" indent="yes" encoding="UTF-8" />


<xsl:template match="/">
========================================================
    Statistiques globales :

    Total AF : <xsl:value-of select="projets/total" /> , Rang AF : <xsl:value-of select="projets/rang" /> , RAC global : <xsl:value-of select="projets/rac" />



--------------------------------------------------------
    Badges :
--------------------------------------------------------
    <xsl:apply-templates select="projets/badges/badge" />



--------------------------------------------------------
    Projets :
--------------------------------------------------------
    <xsl:apply-templates select="projets/projet" />

========================================================
</xsl:template>



<xsl:template match="projets/badges/badge">

    Projet : <xsl:value-of select="projet" /> , Sous-projet : <xsl:value-of select="sous-projet" /> , Couleur : <xsl:value-of select="couleur" />

</xsl:template>



<xsl:template match="projets/projet">

    Projet : <xsl:value-of select="nom" /> , Total : <xsl:value-of select="total" /> , Rang AF : <xsl:value-of select="rang" /> , Rac : <xsl:value-of select="rac" />

</xsl:template>



</xsl:stylesheet>

et un appel en terminal comme ça (à condition d'avoir installé l'outil xsltproc) :
xsltproc my_score_af.xsl http://statseb.boinc-af.org/xml/membre.py?cpid=votre_cpid
on obtient un résultat affiché au format texte, présentant vos infos de stats af.

que l'on peut envoyer dans un fichier texte "mes_resultats.txt" avec cette commande :
xsltproc -o mes_resultats.txt my_score_af.xsl http://statseb.boinc-af.org/xml/membre.py?cpid=votre_cpid
par exemple.

si on ne souhaite que les infos globales, ça simplifie  la feuille xsl :
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="no" indent="yes" encoding="UTF-8" />

<xsl:template match="/">
========================================================
    Statistiques globales :

    Total AF : <xsl:value-of select="projets/total" /> , Rang AF : <xsl:value-of select="projets/rang" /> , RAC global : <xsl:value-of select="projets/rac" />

========================================================
</xsl:template>

</xsl:stylesheet>

[AF>Libristes] ℯ.clℯmℯnt

  • Messages: 197
  • Boinc'eur Junior
  • **
  •   
C'est fort tout ça, félicitation les gars (même si je ne suis pas trop fan de gadgets qui affichent pleins de trucs dans les barres, sur le bureau).