Page 1 sur 1

Condition sur une API

Posté : 18 juil. 2021, 21:56
par michel47
Bonjour,
Je bute sur un problème certainement basique.
Je travaille sur une API foot.
Cette API propose un live-score que j'essaie de faire "évoluer" (pompeux comme mot vu mon niveau c'est pourquoi je le mets entre guillemets).
En fait ce live-score n'est pas différentié par rapport aux résultats des matchs déjà joués donc j'aimerai mettre les matchs en live d'une autre couleur (le temps du live et une fois le match terminé il repasse de la même couleur que les autres).
Mon problème c'est que le live-score change bien de couleur et quand le match est terminé, il garde la même couleur.

Pour définir la temps du match je me suis basé sur l'heure du début du match (utilisant une API gratuite c'est la seule donnée que j'ai a ma disposition pour essayer de gérer le temps).
Dans ma boucle foreach (qui est bonne puisque le live score en lui même fonctionne) j'ai défini mes variables

Code : Tout sélectionner

$date_match=$result['dateEvent']; // c'est la date du match donné par l'API. Un echo de $date_match me donne la bonne date $date_actuelle = date('Y-m-d'); // c'est la date du jour $heure_match=$result['strTime']; // c'est l'heure du match donné par l'API. Un echo de $heure_match me donne la bonne heure $heure_actuelle = date('H:i'); // c'est l'heure à l'instant T $intervalle = strtotime($heure_match. ' + 105 minute'); // J'ai augmenté l'heure de début du match de 105 minutes pour évaluer l'heure de fin du match $heure_fin = date('H:i', $intervalle); //heure supposée de fin du match (echo $heure_fin me donne bien l'heure de début du match augmenté de 1h45)
Une fois que j'ai défini toutes ces variables, j'ai mis une condition sur l'affichage du score du live.

Code : Tout sélectionner

if ($date_match==$date_actuelle AND $heure_match=$heure_actuelle AND $heure_fin<=$heure_actuelle){ echo '<td class="scoredomlive">'.$scoreHome.'</td>'; // Affichage du score en vert }else{ echo '<td class="scoredom">'.$scoreHome.'</td>'; // Affichage du score en noir }
Je ne sais pas si je me suis trompé dans mes signes égal ou si c'est mon heure_fin qui n'est pas reconnue comme une heure.
J'ai joué sur les doubles et les simples signes égal. Quand je mets 2 doubles ou 2 simples signes ce n'est pas bon (soit tous les resultats sont de la couleur "live" soit tous les résultats sont de couleur "matchs terminés".

J'ai forcément merdé quelque part mais je n'arrive pas a savoir ou.
Ma condition telle qu'elle est la en fait correspond a la même chose que si je n'avais laissé la condition que pour la date. Ca me colore les matchs de la journée. Lorsque l'on change de jour, les scores colorés redeviennent noirs.

Merci si quelqu'un peut m'aider
Michel

Re: Condition sur une API

Posté : 18 juil. 2021, 22:02
par or 1
= affectation
== comparaison
une affectation dans un if, c'est rarement pertinent.

Re: Condition sur une API

Posté : 18 juil. 2021, 22:06
par michel47
Oui mais j'ai tâtonné j'ai mis le double égal sur le $heure_match==$heure_actuelle mais ça fonctionne encore moins bien c'est la raison pour laquelle je suis un peu paumé et je ne sais pas quoi faire pour essayer de me dépatouiller de mon problème

Re: Condition sur une API

Posté : 18 juil. 2021, 22:14
par or 1
on peut avoir un echo des 4 variables contenues dans le if ?

Re: Condition sur une API

Posté : 18 juil. 2021, 22:20
par michel47
Je vous fais un screen du résultat des 4 écho (je ne peux pas vous donner l'adresse du site, j'ai tout développé en local sous XAMPP, ce n'est pas encore en ligne)

Re: Condition sur une API

Posté : 18 juil. 2021, 22:37
par michel47
Voici un screen du code
Image

et un screen du résultat associé
Image

Re: Condition sur une API

Posté : 18 juil. 2021, 22:46
par or 1
c'est possible d'avoir le résultat au format texte pour pouvoir faire des copier coller ?
et avoir $heure_actuelle

Re: Condition sur une API

Posté : 18 juil. 2021, 22:48
par michel47
Le résultat de heure actuelle va retourner l'heure a laquelle je fais la capture mais je la fais pas de soucis

Re: Condition sur une API

Posté : 18 juil. 2021, 22:52
par michel47
Voici le code "texte"

Code : Tout sélectionner

$date_match=$result['dateEvent']; $date_actuelle = date('Y-m-d'); $heure_match=$result['strTime']; $heure_actuelle = date('H:i'); $intervalle = strtotime($heure_match. ' + 105 minute'); $heure_fin = date('H:i', $intervalle); echo "<br />"; echo "La date du match est : ".$date_match."<br />"; echo "La date actuelle est : ".$date_actuelle."<br />"; echo "L'heure actuelle est : ".$heure_actuelle."<br />"; echo "L'heure du match est : ".$heure_match."<br />"; echo "La fin du match est : ".$heure_fin;
et la capture du résultat
Image

Re: Condition sur une API

Posté : 18 juil. 2021, 22:57
par or 1
il faut avoir un seul format, pas un coup sous ce format 15:30:00 et un coup 17:15.

avec une date au format mysql, par exemple 2012-03-24 17:45:12 il n'y a pas besoin de décomposer la date et l'heure.
il suffit de comparer 2012-03-24 17:45:12 avec 2012-03-25 17:47:12 avec un < ou un >.
il faut donc obtenir la date de début sous ce format, la date de fin, la date actuelle, et ensuite, tout sera facile.

Re: Condition sur une API

Posté : 18 juil. 2021, 23:03
par michel47
Il faut donc que je mette un

Code : Tout sélectionner

date('H:i', $nom de la variable);
sur l heure du match (ou que je mette un

Code : Tout sélectionner

date('H:i:s', $intervalle);
) ?

Re: Condition sur une API

Posté : 18 juil. 2021, 23:25
par michel47
Bon bien je suis un idiot, je viens de voir ou doit se situer mon erreur ...
L'API donne des horaires UTC (et nous en France on est en UTC+2 donc quand je fais une condition avec l'heure actuelle - donc l'heure réelle française - j'ai 2 heures de décalage, j'indique un match donc l'horaire est défini a 18h00 par exemple alors qu'en France il est 20h00 ...)
J'ai décalé l'horaire de début des matchs de 120 minutes (pour les mettre "heure française"), j'en ai profité pour mettre le même format à toutes les heures.
Je reviendrais pour vous dire si j'ai résolu mon problème ou non.
En tout cas merci pour vos réponses

Re: Condition sur une API

Posté : 19 juil. 2021, 00:05
par michel47
Bon bien ça ne fonctionne toujours pas.
Voici le screen de résultat des mes echos (j'ai mis le début du match "heure française" dans une variable $heure_fra)
Image

Voici le code correspondant

Code : Tout sélectionner

$date_match=$result['dateEvent']; $date_actuelle = date('Y-m-d'); $heure_match=$result['strTime']; $decalage = strtotime($heure_match. ' + 120 minute'); $heure_fra=date('H:i:s', $decalage); $heure_actuelle = date('H:i:s'); $intervalle = strtotime($heure_fra. ' + 105 minute'); $heure_fin = date('H:i:s', $intervalle); echo "<br />"; echo "La date du match est : ".$date_match."<br />"; echo "La date actuelle est : ".$date_actuelle."<br />"; echo "L'heure actuelle est : ".$heure_actuelle."<br />"; echo "L'heure du match est : ".$heure_match."<br />"; echo "L'heure française du match est : ".$heure_fra."<br />"; echo "La fin du match est : ".$heure_fin;
J'ai bien mis la variable $heure_fra pour définir la fin du match avec la variable $intervalle

et mes conditions

Code : Tout sélectionner

if ($date_match==$date_actuelle AND $heure==$heure_actuelle AND $heure_fin<$heure_actuelle){ echo '<td class="scoredomlive">'.$scoreHome.'</td>'; // Affichage du score en vert }else{ echo '<td class="scoredom">'.$scoreHome.'</td>'; // Affichage du score en noir } echo '<td class="versus"> - </td>'; if ($date_match==$date_actuelle AND $heure_fra==$heure_actuelle AND $heure_fin<$heure_actuelle){ echo '<td class="scoreextlive">'.$scoreAway.'</td>'; // Affichage du score en vert }else{ echo '<td class="scoreext">'.$scoreAway.'</td>'; // Affichage du score en noir }
Et tout passe toujours par la class scoredom ou scoreext (et non pas par les classes scoredomlive et scoreextlive)

Re: Condition sur une API

Posté : 19 juil. 2021, 21:52
par michel47
Bon, j'ai finalement résolu mon problème.
C'était un problème d'opérateur
en fait ce n etait pas $heure_fra==$heure_actuelle mais $heure_fra<=$heure_actuelle

Merci pour votre aide