Empecher RECAP si tirage FDJ non effectué.

symbol

Membre actif
13 Octobre 2004
536
25
Bonjour, :coucou:

C'est a chaque nouvelle situation qu'on s'apercoit d'un manque.

Le RECAP se lance parfaitement et fonctionne comme une horloge.

Cependant, aujourd'hui la FDJ n'a toujours pas publiée les résultats du tirage sur son site a 15h00.

Le RECAP se lancant automatiquement a 14h15, du coup, il a repris le tirage d'hier soir (qui est resté online de la veille) et l'a appliqué au prono pour ce midi :-(

J'aimerais que le script vérifie avant si les résultats (ou la date) online sont les mêmes (ou différents)
par rapport au dernier RECAP effectué.

En cas de résultat identique , le RECAP ne s'effectuerait pas (je le lancerais a la main plus tard).

Donc :
1) le script se lance, et assigne les données du tirage (date + N°) à la variable "winningNumbers" puis sauvegarde dans RESULTATS.txt
2) Le tirage précedent est stocké dans le fichier RESULTATS.txt (puisque chaque nouveau lancement du script efface les données précédentes)

J'aimerais une aide pour les commandes afin de comparer les N° (ou la date) lors du lancement du RECAP avec ceux stockés dans le fichier RESULTATS.txt

Si identique, arrêter le RECAP (ou le mettre en stand by pour 30 minutes, puis recommencer la comparaison)

Si quelqu'un a du temps et l'envie, pour me guider. :)

Merci


Pour info :
Les données (date + N°) sont stockés dans le fichier RESULTATS.txt comme suit :

Mardi 31 juillet 2018 - Soir :
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
03 04 07 08 09 13 17 24 25 27 29 30 40 43 51 52 54 61 69 70
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

une correction a prendre en compte :

Je crois qu'il est plus simple de comparer la date du dernier tirage dans le fichier RESULTATS.txt avec la date qui est extrait de la page FDJ ( variable "affichagedate" ).
Si les 2 sont identiques, c'est donc que le tirage n'est pas encore effectué.

J'ai trouvé une base :

Code (Text):
if test "$1" == "1"
then
echo $1
else
echo "no"
fi

J'imagine qu'en modifiant selon le principe :

if "$affichagedate" == ICI_DATE_EXTRAITE_CONTENUE_DANS_FICHIER_RESULTATS.txt
then
mettre_en_attente
then
continuer_le_script
fi


Est-ce que ca semble correct dans le principe ?

merci

J'ai trouvé ca aussi qui semble indiquer que je suis sur la bonne voie :
if [ condition ]; then
do_run_this_due_to_true_condition
else
do_run_this_due_to_false_condition
fi
 
Je connais ça, la méthode que j’utilise c’est de stocker la date des dernières données récupérées dans un coin (fichier) et de comparer avec la nouvelle date.
 
J'ai deja un fichier contenant les dates des derniers RECAP effectué (fichier LOGTIRAGE.txt)

ca se presente comme suit :
---------------------------------------------------------------------------------
RECAP executé Mercredi 01 août 2018 - Midi : 17:21 53
RECAP executé Mercredi 01 août 2018 - Soir : 21:15 00
RECAP executé Jeudi 02 août 2018 - Midi : 14:15 06
---------------------------------------------------------------------------------

Si je ne trompe pas, la variable contenant la date (et les N°) affichée dans le site de la FDJ est "affichagedate"

Bloc de code:
affichagedate=$(curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep -i '<div class="keno_numeros mb10 fl sprite-jeux-bg_resultat_keno">' | sed $'s/.*<h3 class="dateTirage mt20 fl">\(.*\)<span>&nbsp;-&nbsp;\(.*\)<\/span><\/h3>.*sprite-jeux-bg_resultat_keno">\(.*\)<\/div><br class="sp".*/\\1 - \\2 :\\\n\\3/' | sed 's/<p class="keno_num">/ /g' | sed 's/ \([0-9]\)<\/p>/ 0\1/g' | head -1)


La commande pour ecrire la date quand le RECAP est effectué
Bloc de code:
echo RECAP executé "${affichagedate}" "$date_actuelle" >> /Users/xxx/Desktop/KENODATA/LOGTIRAGE.txt


Je dirais que :
si DATE (dans fichier LOGTIRAGE.txt, 1ere ligne) est
identique a date affichée a la FDJ, alors attendre 30 mn puis reessayer
sinon
lancer le RECAP

Par contre maintenant, comment les mettre de facon a avoir un code qui fait ce que je demande ?? :sorry: C'est toujours la meme question. Comment le faire ?:bookworm:
 
Dernière édition:
Pour récupérer les deux date du tirage de la fdj (tu peux rajouter un "head -1" pour n'avoir que la plus récente) :
Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g'

Si je cherche une de ces dates dans un fichier "test" et de faire des actions suivant le cas :
Bloc de code:
if ! grep 'Jeudi 02 août 2018 - Soir' test
then
  echo date non trouvé, nouveau tirage
else
  echo date trouvé, pas de mise à jour ...
fi
 
Merci de ta réponse

Voila ce que ca va donner :

Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt

if ! grep 'Jeudi 02 août 2018 - Soir' LOGTIRAGEDUJOUR.txt   <-- je verrais apres pour comparer les dates
then
  echo date non trouvé, nouveau tirage  (j'imagine que si la condition est vraie alors le script continu ?)
else
  echo date trouvé, pas de mise à jour ... (la date est trouvée, donc je fais "pause 300". Apres la pause de 5 mn (300 sec), comment recommencer le test ?
fi


MAJ : je viens de trouver sur le net
Bloc de code:
while commande1
do
     commande2
     ...
done

Selon https://www.quennec.fr/trucs-astuces/systèmes/gnulinux/programmation-shell-sous-gnulinux/les-bases-de-la-programmation-shell/les-structures-de-contrôle/boucle-while
"La boucle while permet d'exécuter les commandes présentes entre le do et le done tant que la commande1 placée à droite du while retourne un code vrai."



Est-ce ca peut marcher ca ?
Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt

while  ici commande pour comparer les 2 dates    (si date dans fichier LOGTIRAGEDUJOUR.txt est identique a la date contenue dans le fichier RESULTATS.txt (1ere ligne) )
do
pause 300
done
 
Dernière édition:
Tout à fait, il faudra penser à remettre le curl dans la boucle while.

Dans la condition du while, met « grep » si tu veux que la boucle soit s’il trouve le texte recherché. Le « ! grep » est pour que cela boucle tant qu’il n’est pas trouvé.
Pense éventuellement à faire stopper les script s’il y a trop de tentatives en échec...
 
Donc j'en suis la :

Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt

while  ! grep            #   (si date dans fichier LOGTIRAGEDUJOUR.txt est identique a la date contenue dans le fichier RESULTATS.txt (1ere ligne) )

curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt

do

pause 300

done


Je regarde les commandes "grep" sur internet pour comparer 2 elements

Quand je créé un fichier texte, ou je met des commandes, je me retrouve avec une erreur
Bloc de code:
Last login: Fri Aug  3 16:42:12 on console
iMac-de-xxx:~ xxx$ /Users/xxx/Desktop/atester.sh
-bash: /Users/xxx/Desktop/atester.sh: Permission denied
Quand je veux lancer le .sh dans le terminal :-/

MAJ : probleme réglé avec
sudo chmod 755 'filename'

MAJ #2

Pour lire le contenu de LOGTIRAGEDUJOUR.txt
je fais :
Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt
var=`cat /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt`
echo $var

et ca m'affiche bien le contenu de LOGTIRAGEDUJOUR.txt (soit "Vendredi 03 août 2018 - Midi" )

reste plus qu'a voir si la variable "$var" est présente dans le fichier RESULTATS.txt
 
Dernière édition:
@ecatomb

Est-ce ca parait correct stp ?

Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt
var=`cat /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt`


while  ! grep "var"  /Users/xxx/Desktop/KENODATA/RESULTATS.txt

curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt

var=`cat /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt`

do

sleep 300

done
 
Un point qui pourrait te servir, c'est de stocker le contenu de la page dans un fichier (exemple TIRAGEDUJOUR.html). Cela te permettra d'être certain d'extraire les données du bon fichier.
L'option "-q" pour le grep permet de l'avoir en silencieux, utile lors du test du while.
J'ai ajouté un compteur pour arrêter au bout de 10 essais

Cela donne donc ceci :

Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' > /Users/xxx/Desktop/KENODATA/TIRAGEDUJOUR.html
var=$(grep "dateTirage" /Users/xxx/Desktop/KENODATA/TIRAGEDUJOUR.html | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1)

tentative=0
while  [ $tentative -lt 10 ] && ! grep -q "$var" /Users/xxx/Desktop/KENODATA/RESULTATS.txt
do

sleep 300
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' > /Users/xxx/Desktop/KENODATA/TIRAGEDUJOUR.html
var=$(grep "dateTirage" /Users/xxx/Desktop/KENODATA/TIRAGEDUJOUR.html | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1)
tentative=$((tentative + 1))

done

if [ $tentative -eq 10 ]
then
exit 1
fi

# Extraction des numéros :)
 
Merci de ta réponse,

Je ne comprends pas bien pourquoi tu sauvegardes dans TIRAGEDUJOUR.html alors que moi je sauvegarde dans TIRAGEDUJOUR.txt
 
Tu sauvegardais le résultat dans LOGTIRAGEDUJOUR.txt
Dans ma version, je sauvegarde la page html entière, il ne s'agit donc plus de log mais d'un fichier html ^^
 
oui d'accord, mais quel est l'avantage ?

Ca a une importance de mettre html quand ca contient du html ?
 
Dernière édition:
J'ai testé, ca ne fonctionne pas correctement.

Dans le fichier RESULTATS.txt j'ai changé "Vendredi 03 août 2018 - MIDI :" par "Vendredi 03 août 2018 - SOIR :"
le dernier tirage affiché sur la page FDJ est "Vendredi 03 août 2018 - Midi"


- J'ai lancé le script.
- Le script devrait continuer, alors qu'il s'arrete tout meme 5 mn (bien que "Vendredi 03 août 2018 - MIDI :" soit different de "Vendredi 03 août 2018 - SOIR :"
 
Testé avec RESULTATS.txt contenant "Vendredi 03 août 2018 - SOIR" (cela boucle bien) ou "Vendredi 03 août 2018 - Midi" (cela va bien jusqu'à la fin).
Il faut d'ailleurs le modifier pour que ça fasse bien ce que tu veux en enlevant le "!" devant le grep car si on trouve le numéro, c'est que cela n'a pas été mis à jour. C'est corrigé dans la version ci-dessous dans laquelle j'ai rajouté des "echo" pour identifier le problème chez toi
Bloc de code:
#!/bin/bash

curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt
var=$(grep "dateTirage" /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1)

tentative=0
while  [ $tentative -lt 10 ] && grep -q "$var" RESULTATS.txt
do

sleep 300
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' | iconv -f 'iso-8859-15' -t 'UTF-8' > /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt
var=$(grep "dateTirage" /Users/xxx/Desktop/KENODATA/LOGTIRAGEDUJOUR.txt | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1)
tentative=$((tentative + 1))

echo $tentative

done

if [ $tentative -eq 10 ]
then
  exit 1
fi

echo "Extraction des numéros :)"
 
N'oublie pas de stocker le contenu de la variable dans ton fichier "RESULTATS.txt" à la fin de ton scripts complet.

[Edit]Plutôt que de faire
Bloc de code:
sudo chmod 755 'filename'
fait un simple
Bloc de code:
chmod +x 'filename'

Pas besoin de passer via un sudo pour ajouter les droits d'execution à un script ;)
 
Dernière édition par un modérateur: