Le Forum de l'Alliance Francophone

Nouvelles:

  • Projet du Mois FB: Asteroids@home

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

0 Membres et 1 Invité sur ce sujet

Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
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 https://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)


Hors ligne [AF>Libristes>Jip]Augure

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

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

>>


Hors ligne kasur

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 3169
  •   
    • E-mail
Merci !  :smak:


et 194 SETI@home classic workunits (4 764 hours) :p


Hors ligne [AF>Libristes] Dudumomo

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 6104
  •   
    • Find your home in Saigon
    • E-mail
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 https://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 - "https://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 July 2011 à 18:20 par jip »



Hors ligne erdnaxeli

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


Hors ligne [AF>Libristes] nico8313

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 8027
  •   
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 - "https://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 July 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 https://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 https://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>



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

  • Boinc'eur Junior
  • **
  • Messages: 197
  •   
    • chez moi
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).