Empecher RECAP si tirage FDJ non effectué.

Bonjour Ecatomb,

Avec le recul, j'ai retiré la partie du script qui "empechait" de lancer le RECAP si tirage pas encore affiché a la FDJ.
trop complexe, y'avait de problemes de UTF8 et UTF16... bref ca ne fonctionnait.

Par contre il m'est venue une idée.

Avec la commande suivante qui c-va chercher la date affiché a la FDJ:
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)

Voudrais-tu m'ajouter les commandes qui vérifient la présence du mot "Midi" ou "Soir" en fonction de l"heure les commandes heures/minutes .


Plus précisement, quand le script se lance, a 13H45 et que le mot "Soir" figure encore a la page FDJ, celui indique que le nouveau tirage n'est pas affiché.
Plus précisement, quand le script se lance, a 20H45 et que le mot "Midi" figure encore a la page FDJ, celui indique que le nouveau tirage n'est pas affiché.

Voici les plages horaires et le mot qui doit y figurer :
de 13H45 a 20H45 = la FDJ affichera le mot "Midi"
de 20H45 a 13H30 (lendemain) = la FDJ affichera mot "Soir"

Si tu as le temps et l'envie, je suis preneur :)
eusa_pray.gif


Merci
 
Pas trop dispo avant ce soir, mais j’ai déjà une idée. As-tu moyen de lancer ton script avec un paramètre ?
Exemple :
• à 13h45 tu le lances avec le paramètre « Midi »
• à 20h45 tu le lance avec le paramètre « Soir »

Ce paramètre sera dispobile dans la variable $1
 
Merci de ta réponse.

J'imagine que ca ne posera pas de probleme pour lancer le script avec parametre(s).

Voici la procedure de lancement du script :
1) le mac s'allume tout seul grace aux preferences "economiseur energie" (demarrer ou reactiver a 14:13 / eteindre a 14:17). Je change 14h par 21h manuellement pour le soir.

2) le script se lance grace au fichier KENOCHECK.plist qui contient :

Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.local.kenocheck</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/xxx/Desktop/KenoCheck5.1.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
      <dict>
        <key>Hour</key>
        <integer>14</integer>
        <key>Minute</key>
        <integer>15</integer>
      </dict>
      <dict>
        <key>Hour</key>
        <integer>21</integer>
        <key>Minute</key>
        <integer>15</integer>
      </dict>
    </array>
  </dict>
</plist>



Merci
 
Bonjour, Symbol

je suis tes posts, et je me demandais si tu n'aurais pas plus facile de récupérer le numéro du tirage pour faire ta comparaison ?
sur la page il y a : var listDayTirage = {"2018446":{"day":"soir"},"2018445":{"day":"midi"},
Donc le tirage numéro 2018446 est le dernier !

Enfin cela n'est qu'une idée, à toi de voir...
 
  • J’aime
Réactions: symbol
@zeltron54

Merci de ta réponse.

Je trouve l'idée très intéréssante, mais voir ligne N° 4, qui me semble pourrait rendre inutilisable cette idée.

En fait le probleme n'est pas si simple.
Quelques infos a connaitre :

1) Les pages du site de la FDJ sont encodés en iso-8859-15 (si j'ai raison). -> content="text/html; charset=iso-8859-15"
A force de re-encoder moults fois, ca rends difficile de comprendre ce que l'on fait (en tout cas pour moi) :-/

2) Pour poster (dans mon forum) une copie du tirage provenant du site de la FDJ, je dois convertir le texte en UTF-16 (sinon certaines parties ne sont pas affichés correctement), puis le sauvegarder dans un fichier texte que j'upload dans un FTP.

3) Pour comparer des données via une commande du terminal, il faut que tous fichiers textes soient encodés en UTF-8 (selon mes essais, en UTF-16 la commande ca ne fonctionne pas correctement)

4) Quand je lance le script la toute permiere fois (ou après avoir effacés tous les fichiers texte générés par le script), il n'y a plus aucun élément pour comparer avec un ancien tirage (il ne faut aucune comparaison en rapport avec un fichier texte, mais directement sur le site de la FDJ).

Voici le contenu du dossier "KENODATA" (après un lancement du script)
Capture_d_e_cran_2018_08_12_a_18_09_44.png

Chaque fichier contient des données, importées dans le forum (a partir du FTP), ou bien, les données sont utilisées par le script pour ajouter/remplacer de nouvelles données sauvegardées elles-memes dans un fichier texte.

Je dois dire que sature grave. Je me noie dans un verre avec cette histoire de verification du tirage.

L'importance de faire ce controle :
Si le script effectue sa tache 2 fois sur un même tirage (suite a un retard de la FDJ), les gains sont comptés 2 fois et du coup tous les stats, comptes sont faux.

Voila pourquoi je pencherai plus sur un controle "Midi" "Soir" en fonction de l'heure, ce qui résouds le problème de comparaison avec un fichier texte.

MAJ : @zeltron54 je viens de repenser a ce que je viens d'ecrire, finalement, le N° du tirage ca pourrait fonctionner aussi, car si il n'y aucun fichier dans mon dossier "KENODATA", ca veut dire qu'il n'y aucun tirage, et par consequent, il ne peut pas y avoir de double tirage, puisque je repars de 0.
Pas facile a expliquer, j'espere me faire comprendre :-/
 
Dernière édition:
J'avais bien compris tes problèmes d'encodage pour afficher sur ton site.
Dans le cas du numéro de tirage , n'ayant pas besoin de l'afficher, tu le gardes tel que récupéré,sans réencodage, et tu compares chaque fois si supérieur ou si égal.

Enfin, je te proposais ça, mais bon , tu es le mieux placé pour voir si c'est réalisable.
Bonne continuation..
 
  • J’aime
Réactions: symbol
La variable qui nous interesse est située dans la page du site FDJ :
var tabTirages = {"2018447":


Ca me semble réalisable.

Ce test doit se faire dès le début du script avant tout autre évenement.

Lancement script :
COMPARAISON
- Si aucun N° de tirage présent ou inférieur pour comparer, alors continuer le script (effacer ancien N° de tirage, et sauvegarder dans fichier texte le dernier)

- Si N° identique présent (dans un fichier texte) alors mettre le script en attente 5 mn, puis recommencer le test.

Par contre pour extraire ce N° de tirage, il faut parfaitement maitriser les commandes GREP, SED, ou autres. Ce qui n'est pas mon cas :-(



Mains, attendons car il est possible qu'Ecatomb poste une solution au problème.
 
Dernière édition:
Voici les plages horaires et le mot qui doit y figurer :
de 13H45 a 20H45 = la FDJ affichera le mot "Midi"
de 20H45 a 13H30 (lendemain) = la FDJ affichera mot "Soir"

Le mot Midi ou Soir sera stocké dans la variable "var_soir_midi". Je t'ai mis jusqu'à 13h44 pour le "Soir" (lt = less than, ge = greater or equal) ;)
Bloc de code:
heure=$(date "+%H%M")
var_soir_midi=""

if [ $heure -ge 1345 ] && [ $heure -lt 2045 ]; then var_soir_midi="Midi"; fi
if [ $heure -lt 1345 ] || [ $heure -ge 2045 ]; then var_soir_midi="Soir"; fi

echo $var_soir_midi
 
  • J’aime
Réactions: symbol
J'avais bien compris tes problèmes d'encodage pour afficher sur ton site.
Dans le cas du numéro de tirage , n'ayant pas besoin de l'afficher, tu le gardes tel que récupéré,sans réencodage, et tu compares chaque fois si supérieur ou si égal.

Enfin, je te proposais ça, mais bon , tu es le mieux placé pour voir si c'est réalisable.
Bonne continuation..

Oui, le plus simple serait de créer le fichier sans convertir l'encodage. Ensuite, faire la conversion uniquement pour la page à insérer/afficher sur ton site.
 
  • J’aime
Réactions: symbol
Quoi que avec un else c’est mieux pour cette version

Bloc de code:
heure=$(date "+%H%M")
var_soir_midi=""

if [ $heure -ge 1345 ] && [ $heure -lt 2045 ]
then
var_soir_midi="Midi"
else
var_soir_midi="Soir"
fi

echo $var_soir_midi
 
Ecatomb + Zeltron54

Je suis impatient de tester la chose.
Une fois que j'aurais fini de nettoyer un bol de chocolat tomber sur mon clavier !

Merci.
 
Ecatomb, Zeltron54

Voici ce que je propose comme code pour comparer MIDI/SOIR LOCAL a MIDI FDJ
Je sais pas si ca marche, le script se seulement dans 45 mn.

Je voudrais votre avis / modification / optimisation.

Merci

Bloc de code:
############################################################################################
########################### TEST POUR SAVOIR SI NOUVEAU TIRAGE A LA FDJ ###################
############################################################################################

heure=$(date "+%H%M")
var_soir_midi=""

if [ $heure -ge 1345 ] && [ $heure -lt 2045 ]
then
var_soir_midi="Midi"
else
var_soir_midi="Soir"
fi

echo $var_soir_midi > /Users/xxx/Desktop/KENODATA/MIDISOIR.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/MIDISOIRFDJ.txt

var=`cat /Users/xxx/Desktop/KENODATA/MIDISOIR.txt`
echo $var




while   grep "$var" /Users/xxx/Desktop/KENODATA/MIDISOIRFDJ.txt

do

echo TIRAGE IDENTIQUE : ATTENTE 10 MN [600 sec] AVANT NOUVEAU TEST
sleep 600

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/MIDISOIRFDJ.txt

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

done

echo OK TIRAGE DIFFERENT. Le script continu....

### -------------------------------------------------------------------------------------------------------------------------------------------------
 
Une version modifiée :
Bloc de code:
############################################################################################
########################### TEST POUR SAVOIR SI NOUVEAU TIRAGE A LA FDJ ####################
############################################################################################

var_soir_midi=""

function function_soir_midi () {
  heure=$(date "+%H%M")

  if [ $heure -ge 1345 ] && [ $heure -lt 2045 ]
  then
    var_soir_midi="Midi"
  else
    var_soir_midi="Soir"
  fi
}

function_soir_midi
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/MIDISOIRFDJ.txt

while ! grep -q "$var_soir_midi" /Users/xxx/Desktop/KENODATA/MIDISOIRFDJ.txt
do
  echo TIRAGE IDENTIQUE : ATTENTE 10 MN [600 sec] AVANT NOUVEAU TEST
  sleep 600

  function_soir_midi
  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/MIDISOIRFDJ.txt
done

echo OK TIRAGE DIFFERENT. Le script continu....

### -------------------------------------------------------------------------------------------------------------------------------------------------

Ma version te permet de lancer ton script à 13h45 et d'attendre tranquillement la mise à jour.
Idem à partir de 20h45.

Les modifications sont les suivantes :
  1. J'ai crée une fonction "function_soir_midi" pour mettre à jour la variable "var_soir_midi".
  2. J'ai rajouté l'appel à la fonction "function_soir_midi" dans la boucle pour gérer les mises à jour de "var_soir_midi" qu'on pourrait éventuellement avoir. Si tu lances à 20:44:59, elle contiendra "Midi" puis 10min après "Soir". Cela évitera de boucler si le site est à mis à jour pile quand tu le télécharge la page.
  3. Je n'écris pas le contenu de "var_soir_midi" dans un fichier, je me sers de cette variable dans le grep.
  4. J'ai remplacé le "grep" par un "! grep -q". Le "-q" est pour éviter l'affichage du résultat du grep. Pour le "!" c'est à toi de voir, si on ne l'a pas et qu'il est 20h ... ben il va boucler jusqu'à dépasser 20h45 car il trouvera bien "Midi" dans ton fichier "MIDISOIRFDJ". A priori, c'est ce que tu cherchais à faire à l'origine.

A noter que je stockerais plutôt la page html avant de créer le "MIDISOIRFDJ". Exemple :
Bloc de code:
curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' > /Users/xxx/Desktop/KENODATA/keno.html
iconv -f 'iso-8859-15' -t 'UTF-8' /Users/xxx/Desktop/KENODATA/keno.html | grep "dateTirage" | sed 's/.*dateTirage mt20 fl">//' | sed 's/<\/span>.*//' | sed 's/<span>//' | sed 's/&nbsp;/ /g' | head -1 > /Users/xxx/Desktop/KENODATA/MIDISOIRFDJ.txt

Cela te permettra d'être certain de ne pas récupérer une version différente lors du prochain "curl"
;)

A toi de voir ce que tu souhaites avoir au final. A part l'utilisation d'un fichier pour stocker inutilement la date, ta version était déjà bien si tu comptes la lancer avant 13h45/20h45 et récupérer ce prochain tirage.
 
  • J’aime
Réactions: symbol
J'ai testé ce soir le script.

Y'a une erreur.

Le script dit que LOCALEMENT :
si il est entre 13:45 et 20:45 c'est le Midi
si il est après 20:45 et avant 13:45 c'est le soir

ensuite la valeur (midi ou soir) est sauvegardée dans "echo $var_soir_midi > /Users/xxx/Desktop/KENODATA/MIDISOIR.txt""

A 21h15 le script se lance, va chercher la valeur (midi ou soir) sur le site FDJ, les valeurs sont comparées (SOIR localement et SOIR a la FDJ)

Sauf que le script, voit que les 2 valeurs sont identiques, et du coup arrête le script en attendant que les 2 valeurs soient differentes.

Ps: au moment du post de ce message, je n'ai pas encore lu ton message Ecatomb.

MAJ : Ecatomb, j'ai pris ton code du dessus et l'ai intégré au script principal, j'ai lancé le tout a 21:31. Tout semble se passer normalement.

MAJ : A 21:32 j'ai relancé le script (manuellement), celui-ci s'est relancé en intégralité (du coup il recompte 2X les meme gains aux meme gagnants) (mais j ene suis pas censé le lancer a la main)
 
Dernière édition:
:coucou: Tant mieux, j’ai donc bien compris ce que tu voulais faire en modifiant ton grep
 
juste une question :

cette commande
Bloc de code:
while   grep "$var" /Users/xxx/Desktop/KENODATA/MIDISOIRFDJ.txt
c'est bien pour "voir" si la variable "$var" se trouve dans le fichier MIDISOIRFDJ.txt ?

Alors quelle la commande pour qui fait l'inverse ? (si "$var" ne se trouve pas dans MIDISOIRFDJ.txt) ?
 
Je crois qu'on arrive a ce qu'on voulait.

Afin d'être bien sur d'avoir compris ta démarche, veux tu me confirmer :
"Pour le midi, je dois lancer le script (via KENOCHECK.plist) AVANT le tirage prévu a 13:45 , le script essaira jusqu'a ce que le nouveau tirage soit affiché a la FDJ".
"Pour le soir, je dois lancer le script (via KENOCHECK.plist) AVANT le tirage prévu a 20h45 , le script essaira jusqu'a ce que le nouveau tirage soit affiché a la FDJ".

Merci
 
Ecatomb,
J'oubliais, y'a quelques semaines de ca, tu m'avais (encore toi) fais un script pour afficher le compte a rebours dans le forum.
dont voici le code
Bloc de code:
<!-- ########################################  -->
<!-- AFFICHAGE COMPTE A REBOURS pour RECAP  -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
  text-align: center;
  font-size: 25px;
  margin-top:0px;
  color:black;
}
</style>


<center>
<font color="black"><U><b>PROCHAIN RECAP DANS</b></U>
<!--  <div style="overflow:hidden; overflow-x:hidden;  width:150px; height:40px; border:#909090 1px solid;">  -->
<p id="RECAP"></p>

<script>

function fonction_1() {
  // Get todays date and time
  var now = new Date();
  var secondes = now.getHours()*3600 + now.getMinutes()*60 + now.getSeconds();

  // Find the distance between now an the count down date
  var distance = 51300 - secondes;

  // Time calculations for days, hours, minutes and seconds
  var seconds = distance % 60;
  var minutes = (distance - seconds) / 60 % 60;
  var hours = (distance - seconds - minutes*60) / 3600;

  // Output the result in an element with id="RECAP"
  document.getElementById("RECAP").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";

  // If the count down is over, write some text
  if (distance < 0) {
    clearInterval();
    document.getElementById("RECAP").innerHTML = "RECAP de 14h15 effectué";
  }
}

function fonction_2() {
  // Get todays date and time
  var now = new Date();
  var secondes = now.getHours()*3600 + now.getMinutes()*60 + now.getSeconds();

  // Find the distance between now an the count down date
  var distance = 76500 - secondes;

  // Time calculations for days, hours, minutes and seconds
  var seconds = distance % 60;
  var minutes = (distance - seconds) / 60 % 60;
  var hours = (distance - seconds - minutes*60) / 3600;

  // Output the result in an element with id="RECAP"
  document.getElementById("RECAP").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";

  // If the count down is over, write some text
  if (distance < 0) {
    clearInterval();
    document.getElementById("RECAP").innerHTML = "RECAP de 21h15 effectué";
  }
}

function fonction_3() {
  // Get todays date and time
  var now = new Date();
  var secondes = now.getHours()*3600 + now.getMinutes()*60 + now.getSeconds();

  // Find the distance between now an the count down date
  if ( secondes > 76500 ) {
    var distance = 137700 - secondes;
  } else {
    var distance = 51300 - secondes;
  }

  // Time calculations for days, hours, minutes and seconds
  var seconds = distance % 60;
  var minutes = (distance - seconds) / 60 % 60;
  var hours = (distance - seconds - minutes*60) / 3600;

  // Output the result in an element with id="RECAP"
  document.getElementById("RECAP").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";

  // If the count down is over, write some text
  if (distance < 0) {
    clearInterval();
    document.getElementById("RECAP").innerHTML = "RECAP de 14h15 effectué";
  }
}

// Avoir le nombre de secondes depuis 0h00 pour l'heure actuelle
var date = new Date();
var now = date.getHours()*3600 + date.getMinutes()*60 + date.getSeconds();

/*
Tes deux heures en secondes :
14h15 = 50400 + 900 = 51300 (le lendemain : 14h15 + 24h = 137700)
21h15 = 75600 + 900 = 76500
*/
if ( now < 51300 ) {
  // avant 14h15
  setInterval(fonction_1, 1000);
} else {
  if ( now < 76500 ) {
    // entre 14h15 et 21h15
    setInterval(fonction_2, 1000);
  } else {
    // après 21h15
    setInterval(fonction_3, 1000);
  }
}

</script>

Comme on vient de changer l'heure ou le RECAP se lance (il passe de 14H15 a 13H30 et de 21H15 a 20H30, .....soit 45 mn plutot )
Y'a des valeurs a changer dans la script ci-dessus.
Vu que c'est toi qui l'a concu, te serait-il possible de mettre a jour les heures ?

Après c'est fini (croix de bois, croix de fer) :)

Merci a tous