paope a écrit:Bonjour,
Ce n'est pas la première fois qu'il ne fonctionne plus.
On espère une bonne âme pour venir nous corriger le bug sur l'app pour que tout rentre dans l'ordre.
Malheureusement moi je ne sais pas faire...
Merci d'avance à la communauté, cet app est tellement pratique pour gérer ses économies.
Bonne journée
gusdelamort a écrit:Hello à tous,
J'ai une solution qui semble marcher.
Création d'un capteur http
Adresse : https://www.api-couleur-tempo.fr/api/jourTempo/today
On coche, transformer en xml
Xpath codeJour
On crée 4 valeurs, 0 : Non Communiqué / 1: Bleu / 2: Blanc / 3: Rouge
Mise à jour toutes les 60 min, et ça roule :=
Ensuite on copie l'indicateur, pour Tempo Lendemain
Adresse : https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow
gusdelamort a écrit:Hello à tous,
J'ai une solution qui semble marcher.
Création d'un capteur http
Adresse : https://www.api-couleur-tempo.fr/api/jourTempo/today
On coche, transformer en xml
Xpath codeJour
On crée 4 valeurs, 0 : Non Communiqué / 1: Bleu / 2: Blanc / 3: Rouge
Mise à jour toutes les 60 min, et ça roule :=
Ensuite on copie l'indicateur, pour Tempo Lendemain
Adresse : https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow
paope a écrit:Bonjour à tous,
Testé ce matin et ça récupère bien les infos.
merci !
A suivre si quelqu'un met le plugin a jour ou si je me plonge pour revoir toutes mes règles.
Bonne journée à tous
paope a écrit:Bonjour à tous,
Testé ce matin et ça récupère bien les infos.
merci !
A suivre si quelqu'un met le plugin a jour ou si je me plonge pour revoir toutes mes règles.
Bonne journée à tous
http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
avec
VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
VAR3 : vide ou période de polling (secondes) 3600 par défaut
<?php
/*****************************************************************************
**
** Script Tempo/EJP pour eedomus
**
** Script qui permet de récupérer au format XML les données Tempo ou EJP :
** - Couleur Tempo du jour/EJP (//aujourdhui),
** - Couleur Tempo du lendemain/EJP (//demain),
** - Nombre de jours Bleus Tempo restants (//decompte_bleu),
** - Nombre de jours Blancs Tempo restants (//decompte_blanc),
** - Nombre de jours Rouge Tempo restants (//decompte_rouge),
** - Nombre de jours Rouge EJP restants (//decompte),
** - Tarif du jour
** Les données sont stockées en mémoire et le polling sur les sites est réglé
** par la valeur de 'timer' (3600 secondes par défaut).
** Un polling automatique est fait au passage à minuit, 6h, 12h et 22h,
** pour que ce polling automatique se fasse bien, on peut régler la fréquence des plugins à une valeur faible (1 ou 2 minutes) : dans ce cas, les pollings
réels seront synchronisés à peu près sur les passages à l'heure (0:01h,1:01h... pour timer=3600) ou par exemple à (0:01h, 6h:01, 12h:01,18:01h,22:01h pour timer=21600 [6*3600] ); si timer>=36000, les lectures seront (0:01h, 6h:01, 12h:01,22:01h)
** Le nombre d'appels sera donc compris entre 4 et 25 par jour, quel que soit le nombre de devices créés. Le reste du temps les appels se conteteront de renvoyer le contenu de la mémoire.
** en mode test, on peut forcer la lecture avec la commande &reset=1 ou &simul=x, avec x<0 ou >timer
****************************************************************************
** - URL de la Requête
**: http://localhost/script/?exec=edf_tempo.php
** - ou http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
** avec
** VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
** VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
** VAR3 : vide ou période de polling (secondes) 3600 par défaut
** - Fréquence de la Requête : 60 minutes ou 1 si on veut mettre à jour l'affichage plus souvent pour le passage à 0h, 6h, 12h, 22h, de toute façon le polling vers les sites est réglé par 'timer' (3600 par défaut)
** L'URL est de la forme (Tempo) : edf_tempo.php ou edf_ejp.php&contrat=tempo ou utiliser VAR1
** L'URL est de la forme (EJP) : edf_ejp.php ou edf_tempo.php&contrat=ejp ou utiliser VAR1
** si l'URL porte un autre nom, le champ &contrat est obligatoire (ou VAR1)
** commandes ajouter à la fin de la ligne de commande:
** type contrat : &contrat=1 (tempo par défaut ou récupéré dans le nom)
** mode debug : &debug=1 (0 par défaut)
** site : &site=n (0 par défaut -> tous les sites, sinon n° du site)
** timer (Validité du fichier en secondes) :&timer=xxxxx (3600 par défaut)
** reset : effacement mémoire : &reset=n (0 par défaut, 1 sinon)
** simul décalage temporel (secondes) : &simul=yyyyy (0 par défaut)
****************************************************************************
Resultats : /tempo/champ ou //champ
?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
<aujourdhui>BLEU</aujourdhui> // de 6h à 6h (demain)
<date_aujourdhui>JOUR</date_aujourdhui> // de 6h à 6h (demain)
<demain>BLEU</demain> // de 6h (demain) à 6h (aprèsdemain)
<date_demain>11/09</date_demain> // de 6h (demain) à 6h (aprèsdemain)
<now>BLEU</now> // couleur actuelle (dépend de l'heure, avant 6h -> hier)
<date_now>JOUR</date_now> // date actuelle (dépend de l'heure, avant 6h -> hier)
<decompte_bleu>10</decompte_bleu> //nombre de jours écoulés
<decompte_blanc>0</decompte_blanc> //nombre de jours écoulés
<decompte_rouge>0</decompte_rouge> //nombre de jours écoulés
<reste_bleu>290</reste_bleu> //nombre de jours restants
<reste_blanc>43</reste_blanc> //nombre de jours restants
<reste_rouge>22</reste_rouge> //nombre de jours restants
<type>tempo</type>
<hphc>HP</hphc> // période actuelle (dépend de l'heure, avant 6h -> hier)
<tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui> // de 6h à 6h (demain)
<tarifs_demain>0.1609/0.1296</tarifs_demain> // de 6h (demain) à 6h (aprèsdemain)
<tarif_now>0.1609</tarif_now>// tarif actuel (dépend de l'heure, avant 6h -> hier)
<bleu_hc>0.1296</bleu_hc> // tarif
<bleu_hp>0.1609</bleu_hp> // tarif
<blanc_hc>0.1486</blanc_hc> // tarif
<blanc_hp>0.1894</blanc_hp> // tarif
<rouge_hc>0.1568</rouge_hc> // tarif
<rouge_hp>0.7562</rouge_hp> // tarif
</tempo>
<debug>
<date_fichier>2024-09-10 11:34:28</date_fichier>
<timestamp>1725960868</timestamp> //fichier
<date_lecture>Mardi 10/09 11:34:28</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-09&dateJour[]=2024-09-10&dateJour[]=2024-09-11</url> //api edf
<url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_> // url secondaire
<result>1</result> //1->OK
</debug>
</root>
********************************************************************************
urls compatibles :
tempo
https://www.api-couleur-tempo.fr/api/joursTempo?',
https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran'
ejp (pas testé le 2024/09/10)
https://electricite.net/edf/tarifs/ejp // **dates fausses le 2/04
https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain
https://selectra.info/energie/fournisseurs/edf/ejp
https://selectra.info/energie/fournisseurs/edf/ejp/demain
https://observatoires.net/calendrier
https://selectra.info/energie/fournisseurs/edf/ejp/jours
https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain
https://www.fournisseurs-electricite.com/edf/tarifs/ejp
https://www.kelwatt.fr/fournisseurs/edf/ejp/demain
https://www.kelwatt.fr/guide/ejp
******************************************************************************
**
** Evolution des versions :
**
** 2017-07-26 (DjMomo) :V1.0 - Version initiale
** 2019-10-24 (Merguez07) :V2.0 - utilisation du proxy Eedomus
** 2019-10-26 (Merguez07) :V2.1 - Passage du cache de 24h à 1h
** 2020-11-11 (Merguez07) :V3.0 - utilisation des données du site de selectra
** 2021-10-04 (Merguez07) :V3.1 - correction du script suite à evolution du site Electra
** 2022-01-07 (Merguez07) :V3.2 - correction du script suite à evolution du site Electra
** 2022-03-24 (Merguez07) :V3.3 - correction du script suite à evolution du site Electra
** 2022-03-27 (Merguez07) :V3.4 - bug dans le store
** 2022-04-01 (opa95) :V3.5 - corrections mineures, compatible autres sites et EJP
** 2022-04-01 (opa95) :V3.6 - utilisation du site edf tempo et EJP
** 2024-09-10 (opa95) :V3.7 - Utilisation api edf et sites selectra...
*******************************************************************************/
function sdk_jour($time_now,$nbJours = 0,$jourStr = 2) {
//creation date à partir du temps unix décale de $nbJours
//sortie jourFrançais jj/mm
global $days;
$time_now += 86400*$nbJours;
$jour_semaine = date('w',$time_now);
$start = 0;
foreach ($days as $key => $day) {
if ($start == $jour_semaine) {
$jour_semaine = $key;
break;
}
$start ++;
}
switch ($jourStr) {
case 2 : $ret= date('Y-m-d',$time_now);
return $ret;
case 1 : return $jour_semaine.' '.date('d/m',$time_now);
default :
$ret= date('d/m',$time_now);
return $ret;
}
// if ($jourStr ==1 ) return $jour_semaine.' '.date('d/m',$time_now);
// else return date('d/m',$time_now);
// return;
}
function sdk_multiextract1($string,$startStr,$stopStr='',&$start,$outer = false ) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sot pas incluses
// start est remis a jour
// eviter les caractères non standards
$beg = $start;
if (!is_array($startStr)) {
$startLen = strlen($startStr);
if ($startLen > 0)
if ( ($pos = strpos(substr($string,$beg),$startStr)) !== false)
$beg = $beg + $pos + $startLen;
else $beg += $startLen;
}
else {
foreach ($startStr as $str){
$startLen = strlen($str);
if ($startLen > 0) {
if ( ($pos = strpos(substr($string,$beg),$str)) !== false)
$beg = $beg + $pos + $startLen;
else {
$beg += $startLen;
break;
}
}
}
}
if ($outer) $beg -= $startLen;
if (!is_array($stopStr)) {
$stopLen = strlen($stopStr);
if ($stopStr)
if ( ($pos = strpos(substr($string,$beg+1),$stopStr)) !== false)
$end = $beg + $pos + 1;
else $end = strlen($string);
}
else {
$end = $beg;
foreach ($stopStr as $str){
$stopLen = strlen($str);
if ($stopStr) {
if ( ($pos = strpos(substr($string,$beg+1),$str)) !== false)
$end = $beg + $pos + 1;
else {
$end = strlen($string);
break;
}
}
}
}
if ($outer) $end += $stopLen;
$launch = substr($string,$beg,$end-$beg);
$start = $end;
return $launch;
}
function sdk_multiextract($string,$startStr,$stopStr='',&$start,$startIn = false,$stopIn = false) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sont pas incluses
// start est remis a jour
// eviter les caractères non standards
// si startStr (ou stopStr) de la forme
// array(array('a','b'),array('d','e')) recherche de (a puis b) ou bien (d puis e), si séquence 1 absente
// array('ab', 'ef') recherche de 'ab' puis 'ef'
// 'abc' recherche de 'abc'
$found = true;
if (!is_array($startStr)) {
$startStr = array($startStr);
}
foreach ($startStr as $codes){
if (!is_array($codes)) {
$codes = $startStr;//$codes = array($codes);
}
$beg = $start;
$startPos = '';
foreach ($codes as $code) {
$startLen = strlen($code);
if ( ($startLen != 0) && (($pos = strpos(substr($string,$beg),$code)) !== false) ) {
if ($startPos == '') $startPos = $beg + $pos;
$beg = $beg + $pos + $startLen;
}
else {
$beg = $start;
if ($startPos == '') $startPos = $beg;
$found = false;
break;
}
}
if ($found) break;
}
$start = $beg;
$found = true;
if (!is_array($stopStr)) {
$stopStr = array($stopStr);
}
foreach ($stopStr as $codes){
if (!is_array($codes)) {
$codes = $stopStr;//$codes = array($codes);
}
$end = $start;
$stopPos = '';
foreach ($codes as $code) {
$stopLen = strlen($code);
if ( ($stopLen != 0) && (($pos = strpos(substr($string,$end+1),$code)) !== false) ) {
$end = $end + 1 + $pos;
if ($stopPos == '') $stopPos = $end;
}
else {
$end = $start;
if ($stopPos == '') $stopPos = $end;
$found = false;
break;
}
}
if ($found) break;
}
if ($startIn) $beg = $startPos;
if ($stopIn) $end += $stopLen;
else $end = $stopPos;
$launch = substr($string,$beg,$end-$beg);
return $launch;
}
function sdk_extract($string,$startStr,$stopStr='',$start = 0,$startIn = false,$stopIn = false) { // Ectraire une chaine de caracteres suivant plusieurs separateurs
// appel de sdk_multiextract, start inchangé
$launch = sdk_multiextract($string,$startStr,$stopStr,$start,$startIn,$stopIn );
return $launch;
}
function sdk_multiexplode ($delimiters,$string) { // Separer une chaine de caracteres suivant plusieurs separateurs
// remplacement delimiters[1] par delimiters[0]
// renvoi du tableau rédultat de explode
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
function sdk_format ($string,$field = 'color') { // met en forme selon la semantique du plugin du store
// formatage de date -> format[dayWeek] dayWeek et format[dateJM] jj/mm ou renvoi ND ND
// formatage de couleur tempo -> BLEU, BLANC, ROUGE ND
// formatage de couleur ejp -> NON_EJP, EST_EJP, ND
global $contrat;// tempo ou ejp
global $upc_contrat;// TEMPO ou EJP
global $days;// jour de la semaine
$string = str_replace($upc_contrat,'',trim(strtoupper($string)));
if ($field == 'date') {
if (strlen($string) < 6) $string = 'ND '.$string;
list($format['dayWeek'],$format['dateJM']) = explode(' ',trim($string));
if ($format['dayWeek'] != 'ND') $format['dayWeek'] = $format['dayWeek'][0].strtolower(substr($format['dayWeek'],1));
if (!array_key_exists($format['dayWeek'],$days) ) $format['dayWeek'] = 'ND';
}
else {
$format = "ND";
$string = strtoupper(str_replace(' ','',$string));
if ($contrat == 'ejp') {
if ( ($string == "PASD'") || (strpos($string,'JAMAIS') !== false) ) $format="NON_EJP";
if ($string == "JOUR") $format="EST_EJP";
}
else {
$string = strtoupper($string);
$color = array("1"=>"BLEU","2"=>"BLANC","3"=>"ROUGE","0"=>"ND");
if (is_numeric($string)) {
$string = $string%4;
if ($string>0) return $color[$string];
}
foreach ($color as $col) {
if (strpos($string,$col) !== false) {
$format = $col;
break;
}
}
}
}
return $format;
}
define('MEM','OLD');
define('DEFTYPE','selectran');// format url annexe
define('DEFTIME','3600');//3600 secondes
define('NBB','300');
define('NBW','43');
define('NBR','22');
define('TSTART',6);//début start
define('TSTOP',22);//fin HP
$months = array('janvier' => 'January', 'février' => 'February','mars' => 'March','avril' => 'April','mai' => 'May',
'juin' => 'June','juillet' => 'July','août' => 'August','septembre' => 'September','octobre' => 'October',
'novembre' => 'November','décembre' => 'December');
$days = array('Dimanche' => 'Sunday','Lundi' => 'Monday','Mardi' => 'Tuesday','Mercredi' => 'Wednesday','Jeudi' => 'Tuesday',
'Vendredi' => 'Friday','Samedi' => 'Saturday');
//initialisation des variables
//$start = strlen('exec=edf_');
$source = (array_key_exists('exec',$_GET))? strtolower($_GET['exec']):"";
if (strpos('Z'.$source,'tempo')) $contrat = 'tempo';
elseif (strpos('Z'.$source,'ejp'))$contrat = 'ejp';
else $contrat = "";
$contrats = array('tempo','ejp');
$urls = array('tempo' => array (
'https://www.api-couleur-tempo.fr/api/joursTempo?',
'https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
'https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
'https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran',
'https://www.kelwatt.fr/guide/tempo#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/tempo#selectra',
),
'ejp' => array (
1 => 'https://selectra.info/energie/fournisseurs/edf/ejp#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/ejp#selectra',
'https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain#selectra',
'https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain#selectra',
'https://www.kelwatt.fr/fournisseurs/edf/ejp#selectra',
'https://electricite.net/edf/tarifs/ejp#selectra',
'https://agence-energie.com/edf/tarifs/ejp#selectra'
)
);
$types = array('selectra','selectran','keskeces');
$contrat_ = strtolower(getArg('contrat',false,""));
$contrat = (($contrat_!="") && (in_array($contrat_,$contrats)))? $contrat_:$contrat;
$debug = getArg('debug',false);
if ( (!$debug) || (!in_array($debug,array(0,1))) ) $debug = 0;
$num_site = abs(getArg('site',false));
if ( (!$num_site) || (($num_site > count($urls[$contrat]) )) ) $num_site = 1;
if ($num_site == 0 ) $scan = 1; else $scan = 0;
$timer = getArg('timer',false,DEFTIME);//Validité du fichier
$upc_contrat = strtoupper($contrat);
$poll = 0;
$reset = getArg('reset',false,0);
if ($reset) {
deleteVariable(MEM.$contrat);
$poll = 1;
}
$simul = getArg('simul',false,0);//Décalage temps secondes
$time_now = time()+$simul;
$annee_now = date('Y',$time_now);//aaaa
$heure_now = date('H',$time_now);//hh
$date_now = sdk_jour($time_now,0,1);// jj/mm
$date_demain = sdk_jour($time_now,1,1);//jour jj/mm
$date_hier = sdk_jour($time_now,-1,0);//jour jj/mm
$nowDate = sdk_jour($time_now,0,0);//jour semaine
$dateDemain = sdk_jour($time_now,1,0);//jour semaine
list($nowDayWeek,$bof) = explode(' ',$date_now);
list($tomorrowDayWeek,$bof) = explode(' ',$date_demain);
$infos_ = array (
'todayDate' => 'ND', 'todayDayWeek' => 'ND',
'todayYear' => 'ND', 'todayColor' => 'ND', 'hphc' =>'HP',
'tomorrowDate' => 'ND', 'tomorrowDayWeek' => 'ND', 'tomorrowYear' => 'ND', 'tomorrowColor' => 'ND',
'yesterdayColor' =>'ND', 'yesterdayRate' => 'ND', 'yesterdayDate' => 'ND',
'nowDate' => 'ND','nowColor'=>'ND', 'tarifnow' => 'ND',
'decRed' => NBR, 'totRed' => NBR, 'remRed' => 'ND',
'decWhite' => NBW, 'totWhite' => NBW, 'remWhite' => 'ND',
'decBlue' => NBB, 'totBlue' => NBB, 'remBlue' => 'ND',
'fileDate' => 'ND', 'fileTimestamp' => 'ND',
'BLEU' => array('HC'=>'0.1296','HP'=>'0.1609'),
'BLANC' => array('HC'=>'0.1486','HP'=>'0.1894'),
'ROUGE' => array('HC'=>'0.1568','HP'=>'0.7562'),
) ;
if (loadVariable(MEM.$contrat)) $infos_ = loadVariable(MEM.$contrat);
else $poll = 1;
$infos_['hphc'] = (($heure_now<TSTART) || ($heure_now>=TSTOP))?'HC':'HP';
if (!$poll && array_key_exists('fileTimestamp',$infos_)){// forçage lecture
$file_hour = date("H",$infos_['fileTimestamp']);
if ($time_now<$infos_['fileTimestamp']) {$poll=1;}// simulation (recul)
elseif (($time_now-$infos_['fileTimestamp'])>$timer) {$poll=1;}// temps expiré
elseif (($file_hour<TSTART) && ($heure_now>=TSTART)) {$poll=1;}// passage à 6h
elseif (($file_hour<TSTOP) && ($heure_now>=TSTOP)) {$poll=1;} // passage à 22h
elseif (($file_hour>$heure_now)) {$poll=1;}// passage à minuit
elseif (($file_hour<12) && ($heure_now>=12)) {$poll=1;} // passage à 12h
}
$heure_lecture = date('H:i:s',$time_now);
if ($poll)
{ $urls['tempo'][0] .= 'dateJour[]='.sdk_jour($time_now,-1).'&dateJour[]='.sdk_jour($time_now).'&dateJour[]='.sdk_jour($time_now,1);
$infos_['todayDate'] = $nowDate; // dd/mm
$infos_['todayDayWeek'] = $nowDayWeek; // Jour ou ND
$infos_['tomorrowDate'] = $dateDemain; // dd/mm
$infos_['tomorrowDayWeek'] = $tomorrowDayWeek; // Jour ou ND
$infos_['yesterdayDate'] = $date_hier;
if ('todayDayWeek' == 'Samedi') $infos_['tomorrowColor'] = 'BLEU';
elseif ('todayDayWeek' == 'Dimanche') $infos_['todayColor'] = 'BLEU';
$response0 = httpQuery($urls['tempo'][0],'GET');
$response0 = sdk_json_decode($response0);
$api_edf = count($response0)>1;
$infos_['yesterdayColor'] = sdk_format($response0[0]['codeJour']);
$bof = sdk_format($response0[1]['codeJour']);
if ($bof!='ND') $infos_['todayColor'] = $bof;
$bof = sdk_format($response0[2]['codeJour']);
if ($bof!='ND') $infos_['tomorrowColor'] = $bof;
for ($i=$num_site;$i<=count($urls[$contrat]);$i++){
if (!$i) $i++;
list($url,$type) = explode('#',$urls[$contrat][$num_site]);
if ( (!$type) || (!in_array($type,$types)) ) $type = DEFTYPE;
$response = trim(httpQuery($url,'GET'));
if (strpos($response,'html') === false) $result = 0;
else {$result = 1;break;}
if ($num_site) break;
}
if ($result) {
$erreur = 0;
switch ($type) {
case 'selectra' :
//lecture block
$sep2 = array(array('<!-- END'),array('<div id="block-'));
$sep = array('<div id="block-'.$contrat,'<div');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
//extraction infos Aujourd'hui
$sep2 ='</';
// date
$sep = array('aujourd',$contrat);// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['todayDate'] = $bof['dateJM']; // dd/mm
$infos_['todayDayWeek'] = $bof['dayWeek']; // Jour ou ND
//couleur
$sep = array('_icon','<span>');// couleur
$infos_['todayColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($infos_['todayColor']);//COUL ou ND
//extraction infos demain
$start = 0;// debut block
// date
$sep = array('demain',$contrat);// jour dd:mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['tomorrowDate'] = $bof['dateJM']; // dd/mm
$infos_['tomorrowDayWeek'] = $bof['dayWeek']; // Jour ou ND
// couleur
$sep = array('_icon','<span>');// couleur
$infos_['tomorrowColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
// bilan
$sep = array('title','>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
if ($contrat == 'ejp') {
list($bof,$bof1) = explode('/',$bof);
$bof1 = trim($bof1);
if (is_numeric($bof1)) $infos_['totRed'] = $bof1;
$bof = trim($bof);
if (is_numeric($bof)) {
$infos_['decRed'] = $infos_['totRed'] - $bof;}
}
//complements
$bof = str_replace('/','-',$infos_['todayDate'].'-'.$annee_now);//date europeenne
$bof = strtotime($bof);
if ($bof > $time_now) $infos_['todayYear'] = $annee_now -1;
else $infos_['todayYear'] = $annee_now;
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
break;
case 'selectran' :
$sep2 = array(array('<!-- END'),array('<div class='));
$sep = array('"intro">','hui, ');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
if ($api_edf*0){
$sep = array('il reste');// jour dd/mm
$sep2 =array('</p>');
$block = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$start=0;
$sep2 =array('</');
}else{
//lecture block
//extraction infos Aujourd'hui
// date
$sep = array('hui, ');// jour dd/mm
$sep2 = array(',');// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$jour = explode(" ",$bof);
$jour[1] = $months[$jour[1]];
$date = strtotime($jour[0]." ".$jour[1]." ".$jour[2]);
//couleur
$sep = array('est');// couleur
$sep2 ='</';
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($bof);//COUL ou ND
//extraction infos demain
// date
// couleur
$sep = array('sera');// couleur
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($bof);
}
// bilan
$sep = array('<strong>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
for ($i =0;$i<3;$i++) {
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$nb = (int)$bof;
if (strpos($bof,'bleu')>1) $infos_['remBlue'] = $nb;
elseif (strpos($bof,'rouge')>1) $infos_['remRed'] = $nb;
elseif (strpos($bof,'blanc')>1) $infos_['remWhite'] = $nb;
}
$infos_['decRed'] = $infos_['totRed'] - $infos_['remRed'];
$infos_['decWhite'] = $infos_['totWhite'] - $infos_['remWhite'];
$infos_['decBlue'] = $infos_['totBlue'] - $infos_['remBlue'];
$sep2 = array(array('<!-- END'),array('</tr'));
$sep = array('<th>Abonnement','<strong>','<strong>','</td>');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$sep2 = array(' ');
$sep = array('<td>');
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HP'] = $bof;
break;
case 'keskeces' :
//lecture block1
$sep = array("<div class='cont' onclick=","Aujourd'hui");
$sep2 = "<div class='cont' onclick=";
$startBlock = 0;
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
if (strlen($block == 0) ) {$erreur = 1;break;}
//extraction dates et couleur
$sep2 = '</';
$sep = '';
$start = 0;
$infos_['todayDate'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$sep = array('Jour','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['todayColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['todayColor'] = sdk_format($infos_['todayColor']);
$sep = array('Lendemain','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['tomorrowColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
$date_array = explode(' ',$infos_['todayDate']);//Jour J mois aaaa (français)
$bof = strtotime($date_array[1].' '.$months[$date_array[2]].' '.$date_array[3]);
$infos_['todayDayWeek'] = $date_array[0];
$infos_['todayDate'] = sdk_jour($bof,0,false);//jour JJ/MM
$infos_['todayYear'] = $date_array[3];
$infos_['tomorrowDate'] = sdk_jour($bof,1,false);
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
//lecture block2
$sep = array("<div class='cont' onclick=",'Tempo','Jours');
$sep2 = "<div class='cont pub'";
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
//bilan
$sep2 = '</';
$start = 0;
$sep = array('bj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decBlue'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totBlue'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decBlue'];//nn
$start = 0;
$sep = array('wj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decWhite'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totWhite'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decWhite'];//nn
$start = 0;
$sep = array('rj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decRed'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totRed'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decRed'];//nn
$sep = array('/table',':');//J mois aaaa à hhhmm(français)
$infos_['fileDate'] = trim(sdk_multiextract($block,$sep,'<',$start));//MaJ $start
$date_array = explode(' ',$infos_['fileDate']);//array JJ mois aaaa à hhhmm
$bof = strtotime($date_array[0].' '.$months[$date_array[1]].' '.$date_array[2]);
$infos_['heureFile'] = str_replace('h',':',$date_array[4]);//hh:mm
$infos_['fileDate'] = sdk_jour($bof,0);
break;
}
}
if ($heure_now<TSTART) {
if ($infos_['nowDate'] != $infos_['yesterdayDate']){
$infos_['nowDate'] = $infos_['yesterdayDate'];
$infos_['nowColor'] = $infos_['yesterdayColor'];
// $infos_['tarifNow'] = $infos_['yesterdayRate'];
}
}elseif ($infos_['nowDate'] != $infos_['todayDate']){
$infos_['nowDate'] = $infos_['todayDate'];
$infos_['nowColor'] = $infos_['todayColor'];
// $infos_['tarifNow'] = $infos_['tarifToday'];
}
if ( ($infos_['todayColor'] == 'ND') || ($infos_['tomorrowColor'] == 'ND') ) {
$result = 0;
}
$infos_['fileTimestamp'] = $time_now;;
$infos_['fileDate'] = date('Y-m-d H:i:s',$infos_['fileTimestamp']);
//var_dump($infos_);
saveVariable(MEM.$contrat,$infos_);
}
// Génération du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xml .= "<root>\n";
$xml .= '<'.$contrat.'>'."\n";
$xml .= ' <aujourdhui>'.$infos_['todayColor']."</aujourdhui>\n";
$xml .= ' <date_aujourdhui>'.$infos_['todayDate']."</date_aujourdhui>\n";
$xml .= ' <demain>'.$infos_['tomorrowColor']."</demain>\n";
$xml .= ' <date_demain>'.$infos_['tomorrowDate']."</date_demain>\n";
$xml .= ' <now>'.$infos_['nowColor']."</now>\n";
$xml .= ' <date_now>'.$infos_['nowDate']."</date_now>\n";
if ($contrat == 'ejp') {
$xml .= ' <decompte>'.$infos_['decRed']."</decompte>\n";
}
else {
$xml .= " <decompte_bleu>".$infos_['decBlue']."</decompte_bleu>\n";
$xml .= " <decompte_blanc>" .$infos_['decWhite']."</decompte_blanc>\n";
$xml .= ' <decompte_rouge>' .$infos_['decRed']."</decompte_rouge>\n";
$xml .= " <reste_bleu>" .$infos_['remBlue']."</reste_bleu>\n";
$xml .= " <reste_blanc>" .$infos_['remWhite']."</reste_blanc>\n";
$xml .= ' <reste_rouge>' .$infos_['remRed']."</reste_rouge>\n";
$xml .= ' <type>'.$contrat."</type>\n";
$xml .= ' <hphc>'.$infos_['hphc']."</hphc>\n";
$xml .= ' <tarifs_aujourdhui>'.$infos_[$infos_['todayColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_aujourdhui>\n";
$xml .= ' <tarifs_demain>'.$infos_[$infos_['tomorrowColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_demain>\n";
$xml .= ' <tarif_now>'.$infos_[$infos_['nowColor']][$infos_['hphc']]."</tarif_now>\n";
$xml .= ' <bleu_hc>'.$infos_['BLEU']['HC']."</bleu_hc>\n";
$xml .= ' <bleu_hp>'.$infos_['BLEU']['HP']."</bleu_hp>\n";
$xml .= ' <blanc_hc>'.$infos_['BLANC']['HC']."</blanc_hc>\n";
$xml .= ' <blanc_hp>'.$infos_['BLANC']['HP']."</blanc_hp>\n";
$xml .= ' <rouge_hc>'.$infos_['ROUGE']['HC']."</rouge_hc>\n";
$xml .= ' <rouge_hp>'.$infos_['ROUGE']['HP']."</rouge_hp>\n";
}
$xml .='</'.$contrat.'>'."\n";
$xml .= "<debug>\n";
$xml .= ' <date_fichier>'.$infos_['fileDate']."</date_fichier>\n";
$xml .= ' <timestamp>'.$infos_['fileTimestamp']."</timestamp>\n";
$xml .= ' <date_lecture>'.$date_now." ".$heure_lecture."</date_lecture>\n";
$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
$xml .= ' <url_>'.htmlentities($url)."</url_>\n";
$xml .= ' <result>'.$result."</result>\n";
if ($debug) {
$xml .= ' <source>' .$source ."</source>\n";
$xml .= " <response> " .substr($response,0,100) .".....\n </response>\n";
foreach ($infos_ as $key => $info){
$xml .= ' <test_'.$key.'>' .$info ."</test_".$key.">\n";
}
$xml .= " <debugLen>" .strlen($block) ."</debugLen>\n";
$xml .= " <debugStr>\n" .$block ."\n </debugStr>\n";
foreach ($urls[$contrat] as $key => $url) {
$xml .= ' <url_'.$key.'>'.$url ."</url_".$key.">\n";
}
}
$xml .= "<debug>\n";
$xml .= "<root>\n";
echo $xml;
?>
http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
avec
VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
VAR3 : vide ou période de polling (secondes) 3600 par défaut
<?php
/*****************************************************************************
**
** Script Tempo/EJP pour eedomus
**
** Script qui permet de récupérer au format XML les données Tempo ou EJP :
** - Couleur Tempo du jour/EJP (//aujourdhui),
** - Couleur Tempo du lendemain/EJP (//demain),
** - Nombre de jours Bleus Tempo restants (//decompte_bleu),
** - Nombre de jours Blancs Tempo restants (//decompte_blanc),
** - Nombre de jours Rouge Tempo restants (//decompte_rouge),
** - Nombre de jours Rouge EJP restants (//decompte),
** - Tarif du jour
** Les données sont stockées en mémoire et le polling sur les sites est réglé
** par la valeur de 'timer' (3600 secondes par défaut).
** Un polling automatique est fait au passage à minuit, 6h, 12h et 22h,
** pour que ce polling automatique se fasse bien, on peut régler la fréquence des plugins à une valeur faible (1 ou 2 minutes) : dans ce cas, les pollings
réels seront synchronisés à peu près sur les passages à l'heure (0:01h,1:01h... pour timer=3600) ou par exemple à (0:01h, 6h:01, 12h:01,18:01h,22:01h pour timer=21600 [6*3600] ); si timer>=36000, les lectures seront (0:01h, 6h:01, 12h:01,22:01h)
** Le nombre d'appels sera donc compris entre 4 et 25 par jour, quel que soit le nombre de devices créés. Le reste du temps les appels se conteteront de renvoyer le contenu de la mémoire.
** en mode test, on peut forcer la lecture avec la commande &reset=1 ou &simul=x, avec x<0 ou >timer
****************************************************************************
** - URL de la Requête
**: http://localhost/script/?exec=edf_tempo.php
** - ou http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
** avec
** VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
** VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
** VAR3 : vide ou période de polling (secondes) 3600 par défaut
** - Fréquence de la Requête : 60 minutes ou 1 si on veut mettre à jour l'affichage plus souvent pour le passage à 0h, 6h, 12h, 22h, de toute façon le polling vers les sites est réglé par 'timer' (3600 par défaut)
** L'URL est de la forme (Tempo) : edf_tempo.php ou edf_ejp.php&contrat=tempo ou utiliser VAR1
** L'URL est de la forme (EJP) : edf_ejp.php ou edf_tempo.php&contrat=ejp ou utiliser VAR1
** si l'URL porte un autre nom, le champ &contrat est obligatoire (ou VAR1)
** commandes ajouter à la fin de la ligne de commande:
** type contrat : &contrat=1 (tempo par défaut ou récupéré dans le nom)
** mode debug : &debug=1 (0 par défaut)
** site : &site=n (0 par défaut -> tous les sites, sinon n° du site)
** timer (Validité du fichier en secondes) :&timer=xxxxx (3600 par défaut)
** reset : effacement mémoire : &reset=n (0 par défaut, 1 sinon)
** simul décalage temporel (secondes) : &simul=yyyyy (0 par défaut)
****************************************************************************
Resultats : /tempo/champ ou //champ
?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
<aujourdhui>BLEU</aujourdhui> // de 6h à 6h (demain)
<date_aujourdhui>JOUR</date_aujourdhui> // de 6h à 6h (demain)
<demain>BLEU</demain> // de 6h (demain) à 6h (aprèsdemain)
<date_demain>11/09</date_demain> // de 6h (demain) à 6h (aprèsdemain)
<now>BLEU</now> // couleur actuelle (dépend de l'heure, avant 6h -> hier)
<date_now>JOUR</date_now> // date actuelle (dépend de l'heure, avant 6h -> hier)
<decompte_bleu>10</decompte_bleu> //nombre de jours écoulés
<decompte_blanc>0</decompte_blanc> //nombre de jours écoulés
<decompte_rouge>0</decompte_rouge> //nombre de jours écoulés
<reste_bleu>290</reste_bleu> //nombre de jours restants
<reste_blanc>43</reste_blanc> //nombre de jours restants
<reste_rouge>22</reste_rouge> //nombre de jours restants
<type>tempo</type>
<hphc>HP</hphc> // période actuelle (dépend de l'heure, avant 6h -> hier)
<tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui> // de 6h à 6h (demain)
<tarifs_demain>0.1609/0.1296</tarifs_demain> // de 6h (demain) à 6h (aprèsdemain)
<tarif_now>0.1609</tarif_now>// tarif actuel (dépend de l'heure, avant 6h -> hier)
<bleu_hc>0.1296</bleu_hc> // tarif
<bleu_hp>0.1609</bleu_hp> // tarif
<blanc_hc>0.1486</blanc_hc> // tarif
<blanc_hp>0.1894</blanc_hp> // tarif
<rouge_hc>0.1568</rouge_hc> // tarif
<rouge_hp>0.7562</rouge_hp> // tarif
</tempo>
<debug>
<date_fichier>2024-09-10 11:34:28</date_fichier>
<timestamp>1725960868</timestamp> //fichier
<date_lecture>Mardi 10/09 11:34:28</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-09&dateJour[]=2024-09-10&dateJour[]=2024-09-11</url> //api edf
<url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_> // url secondaire
<result>1</result> //1->OK
</debug>
</root>
********************************************************************************
urls compatibles :
tempo
https://www.api-couleur-tempo.fr/api/joursTempo?',
https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran'
ejp (pas testé le 2024/09/10)
https://electricite.net/edf/tarifs/ejp // **dates fausses le 2/04
https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain
https://selectra.info/energie/fournisseurs/edf/ejp
https://selectra.info/energie/fournisseurs/edf/ejp/demain
https://observatoires.net/calendrier
https://selectra.info/energie/fournisseurs/edf/ejp/jours
https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain
https://www.fournisseurs-electricite.com/edf/tarifs/ejp
https://www.kelwatt.fr/fournisseurs/edf/ejp/demain
https://www.kelwatt.fr/guide/ejp
******************************************************************************
**
** Evolution des versions :
**
** 2017-07-26 (DjMomo) :V1.0 - Version initiale
** 2019-10-24 (Merguez07) :V2.0 - utilisation du proxy Eedomus
** 2019-10-26 (Merguez07) :V2.1 - Passage du cache de 24h à 1h
** 2020-11-11 (Merguez07) :V3.0 - utilisation des données du site de selectra
** 2021-10-04 (Merguez07) :V3.1 - correction du script suite à evolution du site Electra
** 2022-01-07 (Merguez07) :V3.2 - correction du script suite à evolution du site Electra
** 2022-03-24 (Merguez07) :V3.3 - correction du script suite à evolution du site Electra
** 2022-03-27 (Merguez07) :V3.4 - bug dans le store
** 2022-04-01 (opa95) :V3.5 - corrections mineures, compatible autres sites et EJP
** 2022-04-01 (opa95) :V3.6 - utilisation du site edf tempo et EJP
** 2024-09-10 (opa95) :V3.7 - Utilisation api edf et sites selectra...
*******************************************************************************/
function sdk_jour($time_now,$nbJours = 0,$jourStr = 2) {
//creation date à partir du temps unix décale de $nbJours
//sortie jourFrançais jj/mm
global $days;
$time_now += 86400*$nbJours;
$jour_semaine = date('w',$time_now);
$start = 0;
foreach ($days as $key => $day) {
if ($start == $jour_semaine) {
$jour_semaine = $key;
break;
}
$start ++;
}
switch ($jourStr) {
case 2 : $ret= date('Y-m-d',$time_now);
return $ret;
case 1 : return $jour_semaine.' '.date('d/m',$time_now);
default :
$ret= date('d/m',$time_now);
return $ret;
}
// if ($jourStr ==1 ) return $jour_semaine.' '.date('d/m',$time_now);
// else return date('d/m',$time_now);
// return;
}
function sdk_multiextract1($string,$startStr,$stopStr='',&$start,$outer = false ) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sot pas incluses
// start est remis a jour
// eviter les caractères non standards
$beg = $start;
if (!is_array($startStr)) {
$startLen = strlen($startStr);
if ($startLen > 0)
if ( ($pos = strpos(substr($string,$beg),$startStr)) !== false)
$beg = $beg + $pos + $startLen;
else $beg += $startLen;
}
else {
foreach ($startStr as $str){
$startLen = strlen($str);
if ($startLen > 0) {
if ( ($pos = strpos(substr($string,$beg),$str)) !== false)
$beg = $beg + $pos + $startLen;
else {
$beg += $startLen;
break;
}
}
}
}
if ($outer) $beg -= $startLen;
if (!is_array($stopStr)) {
$stopLen = strlen($stopStr);
if ($stopStr)
if ( ($pos = strpos(substr($string,$beg+1),$stopStr)) !== false)
$end = $beg + $pos + 1;
else $end = strlen($string);
}
else {
$end = $beg;
foreach ($stopStr as $str){
$stopLen = strlen($str);
if ($stopStr) {
if ( ($pos = strpos(substr($string,$beg+1),$str)) !== false)
$end = $beg + $pos + 1;
else {
$end = strlen($string);
break;
}
}
}
}
if ($outer) $end += $stopLen;
$launch = substr($string,$beg,$end-$beg);
$start = $end;
return $launch;
}
function sdk_multiextract($string,$startStr,$stopStr='',&$start,$startIn = false,$stopIn = false) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sont pas incluses
// start est remis a jour
// eviter les caractères non standards
// si startStr (ou stopStr) de la forme
// array(array('a','b'),array('d','e')) recherche de (a puis b) ou bien (d puis e), si séquence 1 absente
// array('ab', 'ef') recherche de 'ab' puis 'ef'
// 'abc' recherche de 'abc'
$found = true;
if (!is_array($startStr)) {
$startStr = array($startStr);
}
foreach ($startStr as $codes){
if (!is_array($codes)) {
$codes = $startStr;//$codes = array($codes);
}
$beg = $start;
$startPos = '';
foreach ($codes as $code) {
$startLen = strlen($code);
if ( ($startLen != 0) && (($pos = strpos(substr($string,$beg),$code)) !== false) ) {
if ($startPos == '') $startPos = $beg + $pos;
$beg = $beg + $pos + $startLen;
}
else {
$beg = $start;
if ($startPos == '') $startPos = $beg;
$found = false;
break;
}
}
if ($found) break;
}
$start = $beg;
$found = true;
if (!is_array($stopStr)) {
$stopStr = array($stopStr);
}
foreach ($stopStr as $codes){
if (!is_array($codes)) {
$codes = $stopStr;//$codes = array($codes);
}
$end = $start;
$stopPos = '';
foreach ($codes as $code) {
$stopLen = strlen($code);
if ( ($stopLen != 0) && (($pos = strpos(substr($string,$end+1),$code)) !== false) ) {
$end = $end + 1 + $pos;
if ($stopPos == '') $stopPos = $end;
}
else {
$end = $start;
if ($stopPos == '') $stopPos = $end;
$found = false;
break;
}
}
if ($found) break;
}
if ($startIn) $beg = $startPos;
if ($stopIn) $end += $stopLen;
else $end = $stopPos;
$launch = substr($string,$beg,$end-$beg);
return $launch;
}
function sdk_extract($string,$startStr,$stopStr='',$start = 0,$startIn = false,$stopIn = false) { // Ectraire une chaine de caracteres suivant plusieurs separateurs
// appel de sdk_multiextract, start inchangé
$launch = sdk_multiextract($string,$startStr,$stopStr,$start,$startIn,$stopIn );
return $launch;
}
function sdk_multiexplode ($delimiters,$string) { // Separer une chaine de caracteres suivant plusieurs separateurs
// remplacement delimiters[1] par delimiters[0]
// renvoi du tableau rédultat de explode
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
function sdk_format ($string,$field = 'color') { // met en forme selon la semantique du plugin du store
// formatage de date -> format[dayWeek] dayWeek et format[dateJM] jj/mm ou renvoi ND ND
// formatage de couleur tempo -> BLEU, BLANC, ROUGE ND
// formatage de couleur ejp -> NON_EJP, EST_EJP, ND
global $contrat;// tempo ou ejp
global $upc_contrat;// TEMPO ou EJP
global $days;// jour de la semaine
$string = str_replace($upc_contrat,'',trim(strtoupper($string)));
if ($field == 'date') {
if (strlen($string) < 6) $string = 'ND '.$string;
list($format['dayWeek'],$format['dateJM']) = explode(' ',trim($string));
if ($format['dayWeek'] != 'ND') $format['dayWeek'] = $format['dayWeek'][0].strtolower(substr($format['dayWeek'],1));
if (!array_key_exists($format['dayWeek'],$days) ) $format['dayWeek'] = 'ND';
}
else {
$format = "ND";
$string = strtoupper(str_replace(' ','',$string));
if ($contrat == 'ejp') {
if ( ($string == "PASD'") || (strpos($string,'JAMAIS') !== false) ) $format="NON_EJP";
if ($string == "JOUR") $format="EST_EJP";
}
else {
$string = strtoupper($string);
$color = array("1"=>"BLEU","2"=>"BLANC","3"=>"ROUGE","0"=>"ND");
if (is_numeric($string)) {
$string = $string%4;
if ($string>0) return $color[$string];
}
foreach ($color as $col) {
if (strpos($string,$col) !== false) {
$format = $col;
break;
}
}
}
}
return $format;
}
define('MEM','OLD');
define('DEFTYPE','selectran');// format url annexe
define('DEFTIME','3600');//3600 secondes
define('NBB','300');
define('NBW','43');
define('NBR','22');
define('TSTART',6);//début start
define('TSTOP',22);//fin HP
$months = array('janvier' => 'January', 'février' => 'February','mars' => 'March','avril' => 'April','mai' => 'May',
'juin' => 'June','juillet' => 'July','août' => 'August','septembre' => 'September','octobre' => 'October',
'novembre' => 'November','décembre' => 'December');
$days = array('Dimanche' => 'Sunday','Lundi' => 'Monday','Mardi' => 'Tuesday','Mercredi' => 'Wednesday','Jeudi' => 'Tuesday',
'Vendredi' => 'Friday','Samedi' => 'Saturday');
//initialisation des variables
//$start = strlen('exec=edf_');
$source = (array_key_exists('exec',$_GET))? strtolower($_GET['exec']):"";
if (strpos('Z'.$source,'tempo')) $contrat = 'tempo';
elseif (strpos('Z'.$source,'ejp'))$contrat = 'ejp';
else $contrat = "";
$contrats = array('tempo','ejp');
$urls = array('tempo' => array (
'https://www.api-couleur-tempo.fr/api/joursTempo?',
'https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
'https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
'https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran',
'https://www.kelwatt.fr/guide/tempo#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/tempo#selectra',
),
'ejp' => array (
1 => 'https://selectra.info/energie/fournisseurs/edf/ejp#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/ejp#selectra',
'https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain#selectra',
'https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain#selectra',
'https://www.kelwatt.fr/fournisseurs/edf/ejp#selectra',
'https://electricite.net/edf/tarifs/ejp#selectra',
'https://agence-energie.com/edf/tarifs/ejp#selectra'
)
);
$types = array('selectra','selectran','keskeces');
$contrat_ = strtolower(getArg('contrat',false,""));
$contrat = (($contrat_!="") && (in_array($contrat_,$contrats)))? $contrat_:$contrat;
$debug = getArg('debug',false);
if ( (!$debug) || (!in_array($debug,array(0,1))) ) $debug = 0;
$num_site = abs(getArg('site',false));
if ( (!$num_site) || (($num_site > count($urls[$contrat]) )) ) $num_site = 1;
if ($num_site == 0 ) $scan = 1; else $scan = 0;
$timer = getArg('timer',false,DEFTIME);//Validité du fichier
$upc_contrat = strtoupper($contrat);
$poll = 0;
$reset = getArg('reset',false,0);
if ($reset) {
deleteVariable(MEM.$contrat);
$poll = 1;
}
$simul = getArg('simul',false,0);//Décalage temps secondes
$time_now = time()+$simul;
$annee_now = date('Y',$time_now);//aaaa
$heure_now = date('H',$time_now);//hh
$date_now = sdk_jour($time_now,0,1);// jj/mm
$date_demain = sdk_jour($time_now,1,1);//jour jj/mm
$date_hier = sdk_jour($time_now,-1,0);//jour jj/mm
$nowDate = sdk_jour($time_now,0,0);//jour semaine
$dateDemain = sdk_jour($time_now,1,0);//jour semaine
list($nowDayWeek,$bof) = explode(' ',$date_now);
list($tomorrowDayWeek,$bof) = explode(' ',$date_demain);
$infos_ = array (
'todayDate' => 'ND', 'todayDayWeek' => 'ND',
'todayYear' => 'ND', 'todayColor' => 'ND', 'hphc' =>'HP',
'tomorrowDate' => 'ND', 'tomorrowDayWeek' => 'ND', 'tomorrowYear' => 'ND', 'tomorrowColor' => 'ND',
'yesterdayColor' =>'ND', 'yesterdayRate' => 'ND', 'yesterdayDate' => 'ND',
'nowDate' => 'ND','nowColor'=>'ND', 'tarifnow' => 'ND',
'decRed' => NBR, 'totRed' => NBR, 'remRed' => 'ND',
'decWhite' => NBW, 'totWhite' => NBW, 'remWhite' => 'ND',
'decBlue' => NBB, 'totBlue' => NBB, 'remBlue' => 'ND',
'fileDate' => 'ND', 'fileTimestamp' => 'ND',
'BLEU' => array('HC'=>'0.1296','HP'=>'0.1609'),
'BLANC' => array('HC'=>'0.1486','HP'=>'0.1894'),
'ROUGE' => array('HC'=>'0.1568','HP'=>'0.7562'),
) ;
if (loadVariable(MEM.$contrat)) $infos_ = loadVariable(MEM.$contrat);
else $poll = 1;
$infos_['hphc'] = (($heure_now<TSTART) || ($heure_now>=TSTOP))?'HC':'HP';
if (!$poll && array_key_exists('fileTimestamp',$infos_)){// forçage lecture
$file_hour = date("H",$infos_['fileTimestamp']);
if ($time_now<$infos_['fileTimestamp']) {$poll=1;}// simulation (recul)
elseif (($time_now-$infos_['fileTimestamp'])>$timer) {$poll=1;}// temps expiré
elseif (($file_hour<TSTART) && ($heure_now>=TSTART)) {$poll=1;}// passage à 6h
elseif (($file_hour<TSTOP) && ($heure_now>=TSTOP)) {$poll=1;} // passage à 22h
elseif (($file_hour>$heure_now)) {$poll=1;}// passage à minuit
elseif (($file_hour<12) && ($heure_now>=12)) {$poll=1;} // passage à 12h
}
$heure_lecture = date('H:i:s',$time_now);
if ($poll)
{ $urls['tempo'][0] .= 'dateJour[]='.sdk_jour($time_now,-1).'&dateJour[]='.sdk_jour($time_now).'&dateJour[]='.sdk_jour($time_now,1);
$infos_['todayDate'] = $nowDate; // dd/mm
$infos_['todayDayWeek'] = $nowDayWeek; // Jour ou ND
$infos_['tomorrowDate'] = $dateDemain; // dd/mm
$infos_['tomorrowDayWeek'] = $tomorrowDayWeek; // Jour ou ND
$infos_['yesterdayDate'] = $date_hier;
if ('todayDayWeek' == 'Samedi') $infos_['tomorrowColor'] = 'BLEU';
elseif ('todayDayWeek' == 'Dimanche') $infos_['todayColor'] = 'BLEU';
$response0 = httpQuery($urls['tempo'][0],'GET');
$response0 = sdk_json_decode($response0);
$api_edf = count($response0)>1;
$infos_['yesterdayColor'] = sdk_format($response0[0]['codeJour']);
$bof = sdk_format($response0[1]['codeJour']);
if ($bof!='ND') $infos_['todayColor'] = $bof;
$bof = sdk_format($response0[2]['codeJour']);
if ($bof!='ND') $infos_['tomorrowColor'] = $bof;
for ($i=$num_site;$i<=count($urls[$contrat]);$i++){
if (!$i) $i++;
list($url,$type) = explode('#',$urls[$contrat][$num_site]);
if ( (!$type) || (!in_array($type,$types)) ) $type = DEFTYPE;
$response = trim(httpQuery($url,'GET'));
if (strpos($response,'html') === false) $result = 0;
else {$result = 1;break;}
if ($num_site) break;
}
if ($result) {
$erreur = 0;
switch ($type) {
case 'selectra' :
//lecture block
$sep2 = array(array('<!-- END'),array('<div id="block-'));
$sep = array('<div id="block-'.$contrat,'<div');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
//extraction infos Aujourd'hui
$sep2 ='</';
// date
$sep = array('aujourd',$contrat);// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['todayDate'] = $bof['dateJM']; // dd/mm
$infos_['todayDayWeek'] = $bof['dayWeek']; // Jour ou ND
//couleur
$sep = array('_icon','<span>');// couleur
$infos_['todayColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($infos_['todayColor']);//COUL ou ND
//extraction infos demain
$start = 0;// debut block
// date
$sep = array('demain',$contrat);// jour dd:mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['tomorrowDate'] = $bof['dateJM']; // dd/mm
$infos_['tomorrowDayWeek'] = $bof['dayWeek']; // Jour ou ND
// couleur
$sep = array('_icon','<span>');// couleur
$infos_['tomorrowColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
// bilan
$sep = array('title','>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
if ($contrat == 'ejp') {
list($bof,$bof1) = explode('/',$bof);
$bof1 = trim($bof1);
if (is_numeric($bof1)) $infos_['totRed'] = $bof1;
$bof = trim($bof);
if (is_numeric($bof)) {
$infos_['decRed'] = $infos_['totRed'] - $bof;}
}
//complements
$bof = str_replace('/','-',$infos_['todayDate'].'-'.$annee_now);//date europeenne
$bof = strtotime($bof);
if ($bof > $time_now) $infos_['todayYear'] = $annee_now -1;
else $infos_['todayYear'] = $annee_now;
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
break;
case 'selectran' :
$sep2 = array(array('<!-- END'),array('<div class='));
$sep = array('"intro">','hui, ');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
if ($api_edf*0){
$sep = array('il reste');// jour dd/mm
$sep2 =array('</p>');
$block = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$start=0;
$sep2 =array('</');
}else{
//lecture block
//extraction infos Aujourd'hui
// date
$sep = array('hui, ');// jour dd/mm
$sep2 = array(',');// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$jour = explode(" ",$bof);
$jour[1] = $months[$jour[1]];
$date = strtotime($jour[0]." ".$jour[1]." ".$jour[2]);
//couleur
$sep = array('est');// couleur
$sep2 ='</';
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($bof);//COUL ou ND
//extraction infos demain
// date
// couleur
$sep = array('sera');// couleur
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($bof);
}
// bilan
$sep = array('<strong>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
for ($i =0;$i<3;$i++) {
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$nb = (int)$bof;
if (strpos($bof,'bleu')>1) $infos_['remBlue'] = $nb;
elseif (strpos($bof,'rouge')>1) $infos_['remRed'] = $nb;
elseif (strpos($bof,'blanc')>1) $infos_['remWhite'] = $nb;
}
$infos_['decRed'] = $infos_['totRed'] - $infos_['remRed'];
$infos_['decWhite'] = $infos_['totWhite'] - $infos_['remWhite'];
$infos_['decBlue'] = $infos_['totBlue'] - $infos_['remBlue'];
$sep2 = array(array('<!-- END'),array('</tr'));
$sep = array('<th>Abonnement','<strong>','<strong>','</td>');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$sep2 = array(' ');
$sep = array('<td>');
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HP'] = $bof;
break;
case 'keskeces' :
//lecture block1
$sep = array("<div class='cont' onclick=","Aujourd'hui");
$sep2 = "<div class='cont' onclick=";
$startBlock = 0;
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
if (strlen($block == 0) ) {$erreur = 1;break;}
//extraction dates et couleur
$sep2 = '</';
$sep = '';
$start = 0;
$infos_['todayDate'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$sep = array('Jour','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['todayColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['todayColor'] = sdk_format($infos_['todayColor']);
$sep = array('Lendemain','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['tomorrowColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
$date_array = explode(' ',$infos_['todayDate']);//Jour J mois aaaa (français)
$bof = strtotime($date_array[1].' '.$months[$date_array[2]].' '.$date_array[3]);
$infos_['todayDayWeek'] = $date_array[0];
$infos_['todayDate'] = sdk_jour($bof,0,false);//jour JJ/MM
$infos_['todayYear'] = $date_array[3];
$infos_['tomorrowDate'] = sdk_jour($bof,1,false);
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
//lecture block2
$sep = array("<div class='cont' onclick=",'Tempo','Jours');
$sep2 = "<div class='cont pub'";
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
//bilan
$sep2 = '</';
$start = 0;
$sep = array('bj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decBlue'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totBlue'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decBlue'];//nn
$start = 0;
$sep = array('wj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decWhite'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totWhite'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decWhite'];//nn
$start = 0;
$sep = array('rj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decRed'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totRed'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decRed'];//nn
$sep = array('/table',':');//J mois aaaa à hhhmm(français)
$infos_['fileDate'] = trim(sdk_multiextract($block,$sep,'<',$start));//MaJ $start
$date_array = explode(' ',$infos_['fileDate']);//array JJ mois aaaa à hhhmm
$bof = strtotime($date_array[0].' '.$months[$date_array[1]].' '.$date_array[2]);
$infos_['heureFile'] = str_replace('h',':',$date_array[4]);//hh:mm
$infos_['fileDate'] = sdk_jour($bof,0);
break;
}
}
if ($heure_now<TSTART) {
if ($infos_['nowDate'] != $infos_['yesterdayDate']){
$infos_['nowDate'] = $infos_['yesterdayDate'];
$infos_['nowColor'] = $infos_['yesterdayColor'];
// $infos_['tarifNow'] = $infos_['yesterdayRate'];
}
}elseif ($infos_['nowDate'] != $infos_['todayDate']){
$infos_['nowDate'] = $infos_['todayDate'];
$infos_['nowColor'] = $infos_['todayColor'];
// $infos_['tarifNow'] = $infos_['tarifToday'];
}
if ( ($infos_['todayColor'] == 'ND') || ($infos_['tomorrowColor'] == 'ND') ) {
$result = 0;
}
$infos_['fileTimestamp'] = $time_now;;
$infos_['fileDate'] = date('Y-m-d H:i:s',$infos_['fileTimestamp']);
//var_dump($infos_);
saveVariable(MEM.$contrat,$infos_);
}
// Génération du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xml .= "<root>\n";
$xml .= '<'.$contrat.'>'."\n";
$xml .= ' <aujourdhui>'.$infos_['todayColor']."</aujourdhui>\n";
$xml .= ' <date_aujourdhui>'.$infos_['todayDate']."</date_aujourdhui>\n";
$xml .= ' <demain>'.$infos_['tomorrowColor']."</demain>\n";
$xml .= ' <date_demain>'.$infos_['tomorrowDate']."</date_demain>\n";
$xml .= ' <now>'.$infos_['nowColor']."</now>\n";
$xml .= ' <date_now>'.$infos_['nowDate']."</date_now>\n";
if ($contrat == 'ejp') {
$xml .= ' <decompte>'.$infos_['decRed']."</decompte>\n";
}
else {
$xml .= " <decompte_bleu>".$infos_['decBlue']."</decompte_bleu>\n";
$xml .= " <decompte_blanc>" .$infos_['decWhite']."</decompte_blanc>\n";
$xml .= ' <decompte_rouge>' .$infos_['decRed']."</decompte_rouge>\n";
$xml .= " <reste_bleu>" .$infos_['remBlue']."</reste_bleu>\n";
$xml .= " <reste_blanc>" .$infos_['remWhite']."</reste_blanc>\n";
$xml .= ' <reste_rouge>' .$infos_['remRed']."</reste_rouge>\n";
$xml .= ' <type>'.$contrat."</type>\n";
$xml .= ' <hphc>'.$infos_['hphc']."</hphc>\n";
$xml .= ' <tarifs_aujourdhui>'.$infos_[$infos_['todayColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_aujourdhui>\n";
$xml .= ' <tarifs_demain>'.$infos_[$infos_['tomorrowColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_demain>\n";
$xml .= ' <tarif_now>'.$infos_[$infos_['nowColor']][$infos_['hphc']]."</tarif_now>\n";
$xml .= ' <bleu_hc>'.$infos_['BLEU']['HC']."</bleu_hc>\n";
$xml .= ' <bleu_hp>'.$infos_['BLEU']['HP']."</bleu_hp>\n";
$xml .= ' <blanc_hc>'.$infos_['BLANC']['HC']."</blanc_hc>\n";
$xml .= ' <blanc_hp>'.$infos_['BLANC']['HP']."</blanc_hp>\n";
$xml .= ' <rouge_hc>'.$infos_['ROUGE']['HC']."</rouge_hc>\n";
$xml .= ' <rouge_hp>'.$infos_['ROUGE']['HP']."</rouge_hp>\n";
}
$xml .='</'.$contrat.'>'."\n";
$xml .= "<debug>\n";
$xml .= ' <date_fichier>'.$infos_['fileDate']."</date_fichier>\n";
$xml .= ' <timestamp>'.$infos_['fileTimestamp']."</timestamp>\n";
$xml .= ' <date_lecture>'.$date_now." ".$heure_lecture."</date_lecture>\n";
//$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
$xml .= ' <url_>'.htmlentities($url)."</url_>\n";
$xml .= ' <result>'.$result."</result>\n";
if ($debug) {
$xml .= ' <source>' .$source ."</source>\n";
$xml .= " <response> " .substr($response,0,100) .".....\n </response>\n";
foreach ($infos_ as $key => $info){
$xml .= ' <test_'.$key.'>' .$info ."</test_".$key.">\n";
}
$xml .= " <debugLen>" .strlen($block) ."</debugLen>\n";
$xml .= " <debugStr>\n" .$block ."\n </debugStr>\n";
foreach ($urls[$contrat] as $key => $url) {
$xml .= ' <url_'.$key.'>'.$url ."</url_".$key.">\n";
}
}
$xml .= "</debug>\n";
$xml .= "</root>\n";
echo $xml;
?>
<?php
/*****************************************************************************
**
** Script Tempo/EJP pour eedomus
**
** Script qui permet de récupérer au format XML les données Tempo ou EJP :
** - Couleur Tempo du jour/EJP (//aujourdhui),
** - Couleur Tempo du lendemain/EJP (//demain),
** - Nombre de jours Bleus Tempo restants (//decompte_bleu),
** - Nombre de jours Blancs Tempo restants (//decompte_blanc),
** - Nombre de jours Rouge Tempo restants (//decompte_rouge),
** - Nombre de jours Rouge EJP restants (//decompte),
** - Tarif du jour
** Les données sont stockées en mémoire et le polling sur les sites est réglé
** par la valeur de 'timer' (3600 secondes par défaut).
** Un polling automatique est fait au passage à minuit, 6h, 12h et 22h,
** pour que ce polling automatique se fasse bien, on peut régler la fréquence des plugins à une valeur faible (1 ou 2 minutes) : dans ce cas, les pollings
réels seront synchronisés à peu près sur les passages à l'heure (0:01h,1:01h... pour timer=3600) ou par exemple à (0:01h, 6h:01, 12h:01,18:01h,22:01h pour timer=21600 [6*3600] ); si timer>=36000, les lectures seront (0:01h, 6h:01, 12h:01,22:01h)
** Le nombre d'appels sera donc compris entre 4 et 25 par jour, quel que soit le nombre de devices créés. Le reste du temps les appels se conteteront de renvoyer le contenu de la mémoire.
** en mode test, on peut forcer la lecture avec la commande &reset=1 ou &simul=x, avec x<0 ou >timer
****************************************************************************
** - URL de la Requête
**: http://localhost/script/?exec=edf_tempo.php
** - ou http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
** avec
** VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
** VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
** VAR3 : vide ou période de polling (secondes) 3600 par défaut
** - Fréquence de la Requête : 60 minutes ou 1 si on veut mettre à jour l'affichage plus souvent pour le passage à 0h, 6h, 12h, 22h, de toute façon le polling vers les sites est réglé par 'timer' (3600 par défaut)
** L'URL est de la forme (Tempo) : edf_tempo.php ou edf_ejp.php&contrat=tempo ou utiliser VAR1
** L'URL est de la forme (EJP) : edf_ejp.php ou edf_tempo.php&contrat=ejp ou utiliser VAR1
** si l'URL porte un autre nom, le champ &contrat est obligatoire (ou VAR1)
** commandes ajouter à la fin de la ligne de commande:
** type contrat : &contrat=1 (tempo par défaut ou récupéré dans le nom)
** mode debug : &debug=1 (0 par défaut)
** site : &site=n (0 par défaut -> tous les sites, sinon n° du site)
** timer (Validité du fichier en secondes) :&timer=xxxxx (3600 par défaut)
** reset : effacement mémoire : &reset=n (0 par défaut, 1 sinon)
** simul décalage temporel (secondes) : &simul=yyyyy (0 par défaut)
****************************************************************************
Resultats : /tempo/champ ou //champ
?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
<aujourdhui>BLEU</aujourdhui> // de 6h à 6h (demain)
<date_aujourdhui>JOUR</date_aujourdhui> // de 6h à 6h (demain)
<demain>BLEU</demain> // de 6h (demain) à 6h (aprèsdemain)
<date_demain>11/09</date_demain> // de 6h (demain) à 6h (aprèsdemain)
<now>BLEU</now> // couleur actuelle (dépend de l'heure, avant 6h -> hier)
<date_now>JOUR</date_now> // date actuelle (dépend de l'heure, avant 6h -> hier)
<decompte_bleu>10</decompte_bleu> //nombre de jours écoulés
<decompte_blanc>0</decompte_blanc> //nombre de jours écoulés
<decompte_rouge>0</decompte_rouge> //nombre de jours écoulés
<reste_bleu>290</reste_bleu> //nombre de jours restants
<reste_blanc>43</reste_blanc> //nombre de jours restants
<reste_rouge>22</reste_rouge> //nombre de jours restants
<type>tempo</type>
<hphc>HP</hphc> // période actuelle (dépend de l'heure, avant 6h -> hier)
<tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui> // de 6h à 6h (demain)
<tarifs_demain>0.1609/0.1296</tarifs_demain> // de 6h (demain) à 6h (aprèsdemain)
<tarif_now>0.1609</tarif_now>// tarif actuel (dépend de l'heure, avant 6h -> hier)
<bleu_hc>0.1296</bleu_hc> // tarif
<bleu_hp>0.1609</bleu_hp> // tarif
<blanc_hc>0.1486</blanc_hc> // tarif
<blanc_hp>0.1894</blanc_hp> // tarif
<rouge_hc>0.1568</rouge_hc> // tarif
<rouge_hp>0.7562</rouge_hp> // tarif
</tempo>
<debug>
<date_fichier>2024-09-10 11:34:28</date_fichier>
<timestamp>1725960868</timestamp> //fichier
<date_lecture>Mardi 10/09 11:34:28</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-09&dateJour[]=2024-09-10&dateJour[]=2024-09-11</url> //api edf
<url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_> // url secondaire
<result>1</result> //1->OK
</debug>
</root>
********************************************************************************
urls compatibles :
tempo
https://www.api-couleur-tempo.fr/api/joursTempo?',
https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran'
ejp (pas testé le 2024/09/10)
https://electricite.net/edf/tarifs/ejp // **dates fausses le 2/04
https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain
https://selectra.info/energie/fournisseurs/edf/ejp
https://selectra.info/energie/fournisseurs/edf/ejp/demain
https://observatoires.net/calendrier
https://selectra.info/energie/fournisseurs/edf/ejp/jours
https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain
https://www.fournisseurs-electricite.com/edf/tarifs/ejp
https://www.kelwatt.fr/fournisseurs/edf/ejp/demain
https://www.kelwatt.fr/guide/ejp
******************************************************************************
**
** Evolution des versions :
**
** 2017-07-26 (DjMomo) :V1.0 - Version initiale
** 2019-10-24 (Merguez07) :V2.0 - utilisation du proxy Eedomus
** 2019-10-26 (Merguez07) :V2.1 - Passage du cache de 24h à 1h
** 2020-11-11 (Merguez07) :V3.0 - utilisation des données du site de selectra
** 2021-10-04 (Merguez07) :V3.1 - correction du script suite à evolution du site Electra
** 2022-01-07 (Merguez07) :V3.2 - correction du script suite à evolution du site Electra
** 2022-03-24 (Merguez07) :V3.3 - correction du script suite à evolution du site Electra
** 2022-03-27 (Merguez07) :V3.4 - bug dans le store
** 2022-04-01 (opa95) :V3.5 - corrections mineures, compatible autres sites et EJP
** 2022-04-01 (opa95) :V3.6 - utilisation du site edf tempo et EJP
** 2024-09-10 (opa95) :V3.7 - Utilisation api edf et sites selectra...
*******************************************************************************/
function sdk_jour($time_now,$nbJours = 0,$jourStr = 2) {
//creation date à partir du temps unix décale de $nbJours
//sortie jourFrançais jj/mm
global $days;
$time_now += 86400*$nbJours;
$jour_semaine = date('w',$time_now);
$start = 0;
foreach ($days as $key => $day) {
if ($start == $jour_semaine) {
$jour_semaine = $key;
break;
}
$start ++;
}
switch ($jourStr) {
case 2 : $ret= date('Y-m-d',$time_now);
return $ret;
case 1 : return $jour_semaine.' '.date('d/m',$time_now);
default :
$ret= date('d/m',$time_now);
return $ret;
}
// if ($jourStr ==1 ) return $jour_semaine.' '.date('d/m',$time_now);
// else return date('d/m',$time_now);
// return;
}
function sdk_multiextract1($string,$startStr,$stopStr='',&$start,$outer = false ) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sot pas incluses
// start est remis a jour
// eviter les caractères non standards
$beg = $start;
if (!is_array($startStr)) {
$startLen = strlen($startStr);
if ($startLen > 0)
if ( ($pos = strpos(substr($string,$beg),$startStr)) !== false)
$beg = $beg + $pos + $startLen;
else $beg += $startLen;
}
else {
foreach ($startStr as $str){
$startLen = strlen($str);
if ($startLen > 0) {
if ( ($pos = strpos(substr($string,$beg),$str)) !== false)
$beg = $beg + $pos + $startLen;
else {
$beg += $startLen;
break;
}
}
}
}
if ($outer) $beg -= $startLen;
if (!is_array($stopStr)) {
$stopLen = strlen($stopStr);
if ($stopStr)
if ( ($pos = strpos(substr($string,$beg+1),$stopStr)) !== false)
$end = $beg + $pos + 1;
else $end = strlen($string);
}
else {
$end = $beg;
foreach ($stopStr as $str){
$stopLen = strlen($str);
if ($stopStr) {
if ( ($pos = strpos(substr($string,$beg+1),$str)) !== false)
$end = $beg + $pos + 1;
else {
$end = strlen($string);
break;
}
}
}
}
if ($outer) $end += $stopLen;
$launch = substr($string,$beg,$end-$beg);
$start = $end;
return $launch;
}
function sdk_multiextract($string,$startStr,$stopStr='',&$start,$startIn = false,$stopIn = false) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sont pas incluses
// start est remis a jour
// eviter les caractères non standards
// si startStr (ou stopStr) de la forme
// array(array('a','b'),array('d','e')) recherche de (a puis b) ou bien (d puis e), si séquence 1 absente
// array('ab', 'ef') recherche de 'ab' puis 'ef'
// 'abc' recherche de 'abc'
$found = true;
if (!is_array($startStr)) {
$startStr = array($startStr);
}
foreach ($startStr as $codes){
if (!is_array($codes)) {
$codes = $startStr;//$codes = array($codes);
}
$beg = $start;
$startPos = '';
foreach ($codes as $code) {
$startLen = strlen($code);
if ( ($startLen != 0) && (($pos = strpos(substr($string,$beg),$code)) !== false) ) {
if ($startPos == '') $startPos = $beg + $pos;
$beg = $beg + $pos + $startLen;
}
else {
$beg = $start;
if ($startPos == '') $startPos = $beg;
$found = false;
break;
}
}
if ($found) break;
}
$start = $beg;
$found = true;
if (!is_array($stopStr)) {
$stopStr = array($stopStr);
}
foreach ($stopStr as $codes){
if (!is_array($codes)) {
$codes = $stopStr;//$codes = array($codes);
}
$end = $start;
$stopPos = '';
foreach ($codes as $code) {
$stopLen = strlen($code);
if ( ($stopLen != 0) && (($pos = strpos(substr($string,$end+1),$code)) !== false) ) {
$end = $end + 1 + $pos;
if ($stopPos == '') $stopPos = $end;
}
else {
$end = $start;
if ($stopPos == '') $stopPos = $end;
$found = false;
break;
}
}
if ($found) break;
}
if ($startIn) $beg = $startPos;
if ($stopIn) $end += $stopLen;
else $end = $stopPos;
$launch = substr($string,$beg,$end-$beg);
return $launch;
}
function sdk_extract($string,$startStr,$stopStr='',$start = 0,$startIn = false,$stopIn = false) { // Ectraire une chaine de caracteres suivant plusieurs separateurs
// appel de sdk_multiextract, start inchangé
$launch = sdk_multiextract($string,$startStr,$stopStr,$start,$startIn,$stopIn );
return $launch;
}
function sdk_multiexplode ($delimiters,$string) { // Separer une chaine de caracteres suivant plusieurs separateurs
// remplacement delimiters[1] par delimiters[0]
// renvoi du tableau rédultat de explode
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
function sdk_format ($string,$field = 'color') { // met en forme selon la semantique du plugin du store
// formatage de date -> format[dayWeek] dayWeek et format[dateJM] jj/mm ou renvoi ND ND
// formatage de couleur tempo -> BLEU, BLANC, ROUGE ND
// formatage de couleur ejp -> NON_EJP, EST_EJP, ND
global $contrat;// tempo ou ejp
global $upc_contrat;// TEMPO ou EJP
global $days;// jour de la semaine
$string = str_replace($upc_contrat,'',trim(strtoupper($string)));
if ($field == 'date') {
if (strlen($string) < 6) $string = 'ND '.$string;
list($format['dayWeek'],$format['dateJM']) = explode(' ',trim($string));
if ($format['dayWeek'] != 'ND') $format['dayWeek'] = $format['dayWeek'][0].strtolower(substr($format['dayWeek'],1));
if (!array_key_exists($format['dayWeek'],$days) ) $format['dayWeek'] = 'ND';
}
else {
$format = "ND";
$string = strtoupper(str_replace(' ','',$string));
if ($contrat == 'ejp') {
if ( ($string == "PASD'") || (strpos($string,'JAMAIS') !== false) ) $format="NON_EJP";
if ($string == "JOUR") $format="EST_EJP";
}
else {
$string = strtoupper($string);
$color = array("1"=>"BLEU","2"=>"BLANC","3"=>"ROUGE","0"=>"ND");
if (is_numeric($string)) {
$string = $string%4;
if ($string>0) return $color[$string];
}
foreach ($color as $col) {
if (strpos($string,$col) !== false) {
$format = $col;
break;
}
}
}
}
return $format;
}
define('MEM','OLD');
define('DEFTYPE','selectran');// format url annexe
define('DEFTIME','3600');//3600 secondes
define('NBB','300');
define('NBW','43');
define('NBR','22');
define('TSTART',6);//début start
define('TSTOP',22);//fin HP
$months = array('janvier' => 'January', 'février' => 'February','mars' => 'March','avril' => 'April','mai' => 'May',
'juin' => 'June','juillet' => 'July','août' => 'August','septembre' => 'September','octobre' => 'October',
'novembre' => 'November','décembre' => 'December');
$days = array('Dimanche' => 'Sunday','Lundi' => 'Monday','Mardi' => 'Tuesday','Mercredi' => 'Wednesday','Jeudi' => 'Tuesday',
'Vendredi' => 'Friday','Samedi' => 'Saturday');
//initialisation des variables
//$start = strlen('exec=edf_');
$source = (array_key_exists('exec',$_GET))? strtolower($_GET['exec']):"";
if (strpos('Z'.$source,'tempo')) $contrat = 'tempo';
elseif (strpos('Z'.$source,'ejp'))$contrat = 'ejp';
else $contrat = "";
$contrats = array('tempo','ejp');
$urls = array('tempo' => array (
'https://www.api-couleur-tempo.fr/api/joursTempo?',
'https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
'https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
'https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran',
'https://www.kelwatt.fr/guide/tempo#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/tempo#selectra',
),
'ejp' => array (
1 => 'https://selectra.info/energie/fournisseurs/edf/ejp#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/ejp#selectra',
'https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain#selectra',
'https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain#selectra',
'https://www.kelwatt.fr/fournisseurs/edf/ejp#selectra',
'https://electricite.net/edf/tarifs/ejp#selectra',
'https://agence-energie.com/edf/tarifs/ejp#selectra'
)
);
$types = array('selectra','selectran','keskeces');
$contrat_ = strtolower(getArg('contrat',false,""));
$contrat = (($contrat_!="") && (in_array($contrat_,$contrats)))? $contrat_:$contrat;
$debug = getArg('debug',false);
if ( (!$debug) || (!in_array($debug,array(0,1))) ) $debug = 0;
$num_site = abs(getArg('site',false));
if ( (!$num_site) || (($num_site > count($urls[$contrat]) )) ) $num_site = 1;
if ($num_site == 0 ) $scan = 1; else $scan = 0;
$timer = getArg('timer',false,DEFTIME);//Validité du fichier
$upc_contrat = strtoupper($contrat);
$poll = 0;
$reset = getArg('reset',false,0);
if ($reset) {
deleteVariable(MEM.$contrat);
$poll = 1;
}
$simul = getArg('simul',false,0);//Décalage temps secondes
$time_now = time()+$simul;
$annee_now = date('Y',$time_now);//aaaa
$heure_now = date('H',$time_now);//hh
$date_now = sdk_jour($time_now,0,1);// jj/mm
$date_demain = sdk_jour($time_now,1,1);//jour jj/mm
$date_hier = sdk_jour($time_now,-1,0);//jour jj/mm
$nowDate = sdk_jour($time_now,0,0);//jour semaine
$dateDemain = sdk_jour($time_now,1,0);//jour semaine
list($nowDayWeek,$bof) = explode(' ',$date_now);
list($tomorrowDayWeek,$bof) = explode(' ',$date_demain);
$infos_ = array (
'todayDate' => 'ND', 'todayDayWeek' => 'ND',
'todayYear' => 'ND', 'todayColor' => 'ND', 'hphc' =>'HP',
'tomorrowDate' => 'ND', 'tomorrowDayWeek' => 'ND', 'tomorrowYear' => 'ND', 'tomorrowColor' => 'ND',
'yesterdayColor' =>'ND', 'yesterdayRate' => 'ND', 'yesterdayDate' => 'ND',
'nowDate' => 'ND','nowColor'=>'ND', 'tarifnow' => 'ND',
'decRed' => NBR, 'totRed' => NBR, 'remRed' => 'ND',
'decWhite' => NBW, 'totWhite' => NBW, 'remWhite' => 'ND',
'decBlue' => NBB, 'totBlue' => NBB, 'remBlue' => 'ND',
'fileDate' => 'ND', 'fileTimestamp' => 'ND',
'BLEU' => array('HC'=>'0.1296','HP'=>'0.1609'),
'BLANC' => array('HC'=>'0.1486','HP'=>'0.1894'),
'ROUGE' => array('HC'=>'0.1568','HP'=>'0.7562'),
) ;
if (loadVariable(MEM.$contrat)) $infos_ = loadVariable(MEM.$contrat);
else $poll = 1;
$infos_['hphc'] = (($heure_now<TSTART) || ($heure_now>=TSTOP))?'HC':'HP';
if (!$poll && array_key_exists('fileTimestamp',$infos_)){// forçage lecture
$file_hour = date("H",$infos_['fileTimestamp']);
if ($time_now<$infos_['fileTimestamp']) {$poll=1;}// simulation (recul)
elseif (($time_now-$infos_['fileTimestamp'])>$timer) {$poll=1;}// temps expiré
elseif (($file_hour<TSTART) && ($heure_now>=TSTART)) {$poll=1;}// passage à 6h
elseif (($file_hour<TSTOP) && ($heure_now>=TSTOP)) {$poll=1;} // passage à 22h
elseif (($file_hour>$heure_now)) {$poll=1;}// passage à minuit
elseif (($file_hour<12) && ($heure_now>=12)) {$poll=1;} // passage à 12h
}
$heure_lecture = date('H:i:s',$time_now);
if ($poll)
{ $urls['tempo'][0] .= 'dateJour[]='.sdk_jour($time_now,-1).'&dateJour[]='.sdk_jour($time_now).'&dateJour[]='.sdk_jour($time_now,1);
$infos_['todayDate'] = $nowDate; // dd/mm
$infos_['todayDayWeek'] = $nowDayWeek; // Jour ou ND
$infos_['tomorrowDate'] = $dateDemain; // dd/mm
$infos_['tomorrowDayWeek'] = $tomorrowDayWeek; // Jour ou ND
$infos_['yesterdayDate'] = $date_hier;
if ('todayDayWeek' == 'Samedi') $infos_['tomorrowColor'] = 'BLEU';
elseif ('todayDayWeek' == 'Dimanche') $infos_['todayColor'] = 'BLEU';
$response0 = httpQuery($urls['tempo'][0],'GET');
$response0 = sdk_json_decode($response0);
$api_edf = count($response0)>1;
$infos_['yesterdayColor'] = sdk_format($response0[0]['codeJour']);
$bof = sdk_format($response0[1]['codeJour']);
if ($bof!='ND') $infos_['todayColor'] = $bof;
$bof = sdk_format($response0[2]['codeJour']);
if ($bof!='ND') $infos_['tomorrowColor'] = $bof;
for ($i=$num_site;$i<=count($urls[$contrat]);$i++){
if (!$i) $i++;
list($url,$type) = explode('#',$urls[$contrat][$num_site]);
if ( (!$type) || (!in_array($type,$types)) ) $type = DEFTYPE;
$response = trim(httpQuery($url,'GET'));
if (strpos($response,'html') === false) $result = 0;
else {$result = 1;break;}
if ($num_site) break;
}
if ($result) {
$erreur = 0;
switch ($type) {
case 'selectra' :
//lecture block
$sep2 = array(array('<!-- END'),array('<div id="block-'));
$sep = array('<div id="block-'.$contrat,'<div');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
//extraction infos Aujourd'hui
$sep2 ='</';
// date
$sep = array('aujourd',$contrat);// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['todayDate'] = $bof['dateJM']; // dd/mm
$infos_['todayDayWeek'] = $bof['dayWeek']; // Jour ou ND
//couleur
$sep = array('_icon','<span>');// couleur
$infos_['todayColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($infos_['todayColor']);//COUL ou ND
//extraction infos demain
$start = 0;// debut block
// date
$sep = array('demain',$contrat);// jour dd:mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['tomorrowDate'] = $bof['dateJM']; // dd/mm
$infos_['tomorrowDayWeek'] = $bof['dayWeek']; // Jour ou ND
// couleur
$sep = array('_icon','<span>');// couleur
$infos_['tomorrowColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
// bilan
$sep = array('title','>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
if ($contrat == 'ejp') {
list($bof,$bof1) = explode('/',$bof);
$bof1 = trim($bof1);
if (is_numeric($bof1)) $infos_['totRed'] = $bof1;
$bof = trim($bof);
if (is_numeric($bof)) {
$infos_['decRed'] = $infos_['totRed'] - $bof;}
}
//complements
$bof = str_replace('/','-',$infos_['todayDate'].'-'.$annee_now);//date europeenne
$bof = strtotime($bof);
if ($bof > $time_now) $infos_['todayYear'] = $annee_now -1;
else $infos_['todayYear'] = $annee_now;
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
break;
case 'selectran' :
$sep2 = array(array('<!-- END'),array('<div class='));
$sep = array('"intro">','hui, ');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
if ($api_edf){
$sep = array('il reste');// jour dd/mm
$sep2 =array('</p>');
$block = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$start=0;
$sep2 =array('</');
}else{
//lecture block
//extraction infos Aujourd'hui
// date
$sep = array('hui, ');// jour dd/mm
$sep2 = array(',');// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$jour = explode(" ",$bof);
$jour[1] = $months[$jour[1]];
$date = strtotime($jour[0]." ".$jour[1]." ".$jour[2]);
//couleur
$sep = array('est');// couleur
$sep2 ='</';
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($bof);//COUL ou ND
//extraction infos demain
// date
// couleur
$sep = array('sera');// couleur
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($bof);
}
// bilan
$sep = array('<strong>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
for ($i =0;$i<3;$i++) {
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$nb = (int)$bof;
if (strpos($bof,'bleu')>1) $infos_['remBlue'] = $nb;
elseif (strpos($bof,'rouge')>1) $infos_['remRed'] = $nb;
elseif (strpos($bof,'blanc')>1) $infos_['remWhite'] = $nb;
}
$infos_['decRed'] = $infos_['totRed'] - $infos_['remRed'];
$infos_['decWhite'] = $infos_['totWhite'] - $infos_['remWhite'];
$infos_['decBlue'] = $infos_['totBlue'] - $infos_['remBlue'];
$sep2 = array(array('<!-- END'),array('</tr'));
$sep = array('<th>Abonnement','<strong>','<strong>','</td>');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$sep2 = array(' ');
$sep = array('<td>');
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HP'] = $bof;
break;
case 'keskeces' :
//lecture block1
$sep = array("<div class='cont' onclick=","Aujourd'hui");
$sep2 = "<div class='cont' onclick=";
$startBlock = 0;
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
if (strlen($block == 0) ) {$erreur = 1;break;}
//extraction dates et couleur
$sep2 = '</';
$sep = '';
$start = 0;
$infos_['todayDate'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$sep = array('Jour','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['todayColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['todayColor'] = sdk_format($infos_['todayColor']);
$sep = array('Lendemain','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['tomorrowColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
$date_array = explode(' ',$infos_['todayDate']);//Jour J mois aaaa (français)
$bof = strtotime($date_array[1].' '.$months[$date_array[2]].' '.$date_array[3]);
$infos_['todayDayWeek'] = $date_array[0];
$infos_['todayDate'] = sdk_jour($bof,0,false);//jour JJ/MM
$infos_['todayYear'] = $date_array[3];
$infos_['tomorrowDate'] = sdk_jour($bof,1,false);
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
//lecture block2
$sep = array("<div class='cont' onclick=",'Tempo','Jours');
$sep2 = "<div class='cont pub'";
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
//bilan
$sep2 = '</';
$start = 0;
$sep = array('bj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decBlue'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totBlue'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decBlue'];//nn
$start = 0;
$sep = array('wj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decWhite'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totWhite'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decWhite'];//nn
$start = 0;
$sep = array('rj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decRed'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totRed'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decRed'];//nn
$sep = array('/table',':');//J mois aaaa à hhhmm(français)
$infos_['fileDate'] = trim(sdk_multiextract($block,$sep,'<',$start));//MaJ $start
$date_array = explode(' ',$infos_['fileDate']);//array JJ mois aaaa à hhhmm
$bof = strtotime($date_array[0].' '.$months[$date_array[1]].' '.$date_array[2]);
$infos_['heureFile'] = str_replace('h',':',$date_array[4]);//hh:mm
$infos_['fileDate'] = sdk_jour($bof,0);
break;
}
}
if ($heure_now<TSTART) {
if ($infos_['nowDate'] != $infos_['yesterdayDate']){
$infos_['nowDate'] = $infos_['yesterdayDate'];
$infos_['nowColor'] = $infos_['yesterdayColor'];
// $infos_['tarifNow'] = $infos_['yesterdayRate'];
}
}elseif ($infos_['nowDate'] != $infos_['todayDate']){
$infos_['nowDate'] = $infos_['todayDate'];
$infos_['nowColor'] = $infos_['todayColor'];
// $infos_['tarifNow'] = $infos_['tarifToday'];
}
if ( ($infos_['todayColor'] == 'ND') || ($infos_['tomorrowColor'] == 'ND') ) {
$result = 0;
}
$infos_['fileTimestamp'] = $time_now;;
$infos_['fileDate'] = date('Y-m-d H:i:s',$infos_['fileTimestamp']);
//var_dump($infos_);
saveVariable(MEM.$contrat,$infos_);
}
// Génération du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xml .= "<root>\n";
$xml .= '<'.$contrat.'>'."\n";
$xml .= ' <aujourdhui>'.$infos_['todayColor']."</aujourdhui>\n";
$xml .= ' <date_aujourdhui>'.$infos_['todayDate']."</date_aujourdhui>\n";
$xml .= ' <demain>'.$infos_['tomorrowColor']."</demain>\n";
$xml .= ' <date_demain>'.$infos_['tomorrowDate']."</date_demain>\n";
$xml .= ' <now>'.$infos_['nowColor']."</now>\n";
$xml .= ' <date_now>'.$infos_['nowDate']."</date_now>\n";
if ($contrat == 'ejp') {
$xml .= ' <decompte>'.$infos_['decRed']."</decompte>\n";
}
else {
$xml .= " <decompte_bleu>".$infos_['decBlue']."</decompte_bleu>\n";
$xml .= " <decompte_blanc>" .$infos_['decWhite']."</decompte_blanc>\n";
$xml .= ' <decompte_rouge>' .$infos_['decRed']."</decompte_rouge>\n";
$xml .= " <reste_bleu>" .$infos_['remBlue']."</reste_bleu>\n";
$xml .= " <reste_blanc>" .$infos_['remWhite']."</reste_blanc>\n";
$xml .= ' <reste_rouge>' .$infos_['remRed']."</reste_rouge>\n";
$xml .= ' <type>'.$contrat."</type>\n";
$xml .= ' <hphc>'.$infos_['hphc']."</hphc>\n";
$xml .= ' <tarifs_aujourdhui>'.$infos_[$infos_['todayColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_aujourdhui>\n";
$xml .= ' <tarifs_demain>'.$infos_[$infos_['tomorrowColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_demain>\n";
$xml .= ' <tarif_now>'.$infos_[$infos_['nowColor']][$infos_['hphc']]."</tarif_now>\n";
$xml .= ' <bleu_hc>'.$infos_['BLEU']['HC']."</bleu_hc>\n";
$xml .= ' <bleu_hp>'.$infos_['BLEU']['HP']."</bleu_hp>\n";
$xml .= ' <blanc_hc>'.$infos_['BLANC']['HC']."</blanc_hc>\n";
$xml .= ' <blanc_hp>'.$infos_['BLANC']['HP']."</blanc_hp>\n";
$xml .= ' <rouge_hc>'.$infos_['ROUGE']['HC']."</rouge_hc>\n";
$xml .= ' <rouge_hp>'.$infos_['ROUGE']['HP']."</rouge_hp>\n";
}
$xml .='</'.$contrat.'>'."\n";
$xml .= "<debug>\n";
$xml .= ' <date_fichier>'.$infos_['fileDate']."</date_fichier>\n";
$xml .= ' <timestamp>'.$infos_['fileTimestamp']."</timestamp>\n";
$xml .= ' <date_lecture>'.$date_now." ".$heure_lecture."</date_lecture>\n";
//$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
$xml .= ' <url_>'.htmlentities($url)."</url_>\n";
$xml .= ' <result>'.$result."</result>\n";
if ($debug) {
$xml .= ' <source>' .$source ."</source>\n";
$xml .= " <response> " .substr($response,0,100) .".....\n </response>\n";
foreach ($infos_ as $key => $info){
$xml .= ' <test_'.$key.'>' .$info ."</test_".$key.">\n";
}
$xml .= " <debugLen>" .strlen($block) ."</debugLen>\n";
$xml .= " <debugStr>\n" .$block ."\n </debugStr>\n";
foreach ($urls[$contrat] as $key => $url) {
$xml .= ' <url_'.$key.'>'.$url ."</url_".$key.">\n";
}
}
$xml .= "</debug>\n";
$xml .= "</root>\n";
echo $xml;
?>
patrichkof a écrit:Bonjour OPA,
merci pour ton aide,
j'ai remplacé le script par celui que tu as fait mais j'ai tjs le problème, ci-dessous le résultat du test:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
....
<date_lecture>Mercredi 11/09 17:44:34</date_lecture>
<url_></url_>
<result></result>
</debug>
</root>
peux-tu m'aider?
Merci
if ($api_edf*0){
qui devrait être
if ($api_edf){
//$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
qui devrait être
$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
<?php
/*****************************************************************************
**
** Script Tempo/EJP pour eedomus
**
** Script qui permet de récupérer au format XML les données Tempo ou EJP :
** - Couleur Tempo du jour/EJP (//aujourdhui),
** - Couleur Tempo du lendemain/EJP (//demain),
** - Nombre de jours Bleus Tempo restants (//decompte_bleu),
** - Nombre de jours Blancs Tempo restants (//decompte_blanc),
** - Nombre de jours Rouge Tempo restants (//decompte_rouge),
** - Nombre de jours Rouge EJP restants (//decompte),
** - Tarif du jour
** Les données sont stockées en mémoire et le polling sur les sites est réglé
** par la valeur de 'timer' (3600 secondes par défaut).
** Un polling automatique est fait au passage à minuit, 6h, 12h et 22h,
** pour que ce polling automatique se fasse bien, on peut régler la fréquence des plugins à une valeur faible (1 ou 2 minutes) : dans ce cas, les pollings
réels seront synchronisés à peu près sur les passages à l'heure (0:01h,1:01h... pour timer=3600) ou par exemple à (0:01h, 6h:01, 12h:01,18:01h,22:01h pour timer=21600 [6*3600] ); si timer>=36000, les lectures seront (0:01h, 6h:01, 12h:01,22:01h)
** Le nombre d'appels sera donc compris entre 4 et 25 par jour, quel que soit le nombre de devices créés. Le reste du temps les appels se conteteront de renvoyer le contenu de la mémoire.
** en mode test, on peut forcer la lecture avec la commande &reset=1 ou &simul=x, avec x<0 ou >timer
****************************************************************************
** - URL de la Requête
**: http://localhost/script/?exec=edf_tempo.php
** - ou http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
** avec
** VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
** VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
** VAR3 : vide ou période de polling (secondes) 3600 par défaut
** - Fréquence de la Requête : 60 minutes ou 1 si on veut mettre à jour l'affichage plus souvent pour le passage à 0h, 6h, 12h, 22h, de toute façon le polling vers les sites est réglé par 'timer' (3600 par défaut)
** L'URL est de la forme (Tempo) : edf_tempo.php ou edf_ejp.php&contrat=tempo ou utiliser VAR1
** L'URL est de la forme (EJP) : edf_ejp.php ou edf_tempo.php&contrat=ejp ou utiliser VAR1
** si l'URL porte un autre nom, le champ &contrat est obligatoire (ou VAR1)
** commandes ajouter à la fin de la ligne de commande:
** type contrat : &contrat=1 (tempo par défaut ou récupéré dans le nom)
** mode debug : &debug=1 (0 par défaut)
** site : &site=n (0 par défaut -> tous les sites, sinon n° du site)
** timer (Validité du fichier en secondes) :&timer=xxxxx (3600 par défaut)
** reset : effacement mémoire : &reset=n (0 par défaut, 1 sinon)
** simul décalage temporel (secondes) : &simul=yyyyy (0 par défaut)
****************************************************************************
Resultats : /tempo/champ ou //champ
?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
<aujourdhui>BLEU</aujourdhui> // de 6h à 6h (demain)
<date_aujourdhui>JOUR</date_aujourdhui> // de 6h à 6h (demain)
<demain>BLEU</demain> // de 6h (demain) à 6h (aprèsdemain)
<date_demain>11/09</date_demain> // de 6h (demain) à 6h (aprèsdemain)
<now>BLEU</now> // couleur actuelle (dépend de l'heure, avant 6h -> hier)
<date_now>JOUR</date_now> // date actuelle (dépend de l'heure, avant 6h -> hier)
<decompte_bleu>10</decompte_bleu> //nombre de jours écoulés
<decompte_blanc>0</decompte_blanc> //nombre de jours écoulés
<decompte_rouge>0</decompte_rouge> //nombre de jours écoulés
<reste_bleu>290</reste_bleu> //nombre de jours restants
<reste_blanc>43</reste_blanc> //nombre de jours restants
<reste_rouge>22</reste_rouge> //nombre de jours restants
<type>tempo</type>
<hphc>HP</hphc> // période actuelle (dépend de l'heure, avant 6h -> hier)
<tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui> // de 6h à 6h (demain)
<tarifs_demain>0.1609/0.1296</tarifs_demain> // de 6h (demain) à 6h (aprèsdemain)
<tarif_now>0.1609</tarif_now>// tarif actuel (dépend de l'heure, avant 6h -> hier)
<bleu_hc>0.1296</bleu_hc> // tarif
<bleu_hp>0.1609</bleu_hp> // tarif
<blanc_hc>0.1486</blanc_hc> // tarif
<blanc_hp>0.1894</blanc_hp> // tarif
<rouge_hc>0.1568</rouge_hc> // tarif
<rouge_hp>0.7562</rouge_hp> // tarif
</tempo>
<debug>
<date_fichier>2024-09-10 11:34:28</date_fichier>
<timestamp>1725960868</timestamp> //fichier
<date_lecture>Mardi 10/09 11:34:28</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-09&dateJour[]=2024-09-10&dateJour[]=2024-09-11</url> //api edf
<url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_> // url secondaire
<result>1</result> //1->OK
</debug>
</root>
********************************************************************************
urls compatibles :
tempo
https://www.api-couleur-tempo.fr/api/joursTempo?',
https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran'
ejp (pas testé le 2024/09/10)
https://electricite.net/edf/tarifs/ejp // **dates fausses le 2/04
https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain
https://selectra.info/energie/fournisseurs/edf/ejp
https://selectra.info/energie/fournisseurs/edf/ejp/demain
https://observatoires.net/calendrier
https://selectra.info/energie/fournisseurs/edf/ejp/jours
https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain
https://www.fournisseurs-electricite.com/edf/tarifs/ejp
https://www.kelwatt.fr/fournisseurs/edf/ejp/demain
https://www.kelwatt.fr/guide/ejp
******************************************************************************
**
** Evolution des versions :
**
** 2017-07-26 (DjMomo) :V1.0 - Version initiale
** 2019-10-24 (Merguez07) :V2.0 - utilisation du proxy Eedomus
** 2019-10-26 (Merguez07) :V2.1 - Passage du cache de 24h à 1h
** 2020-11-11 (Merguez07) :V3.0 - utilisation des données du site de selectra
** 2021-10-04 (Merguez07) :V3.1 - correction du script suite à evolution du site Electra
** 2022-01-07 (Merguez07) :V3.2 - correction du script suite à evolution du site Electra
** 2022-03-24 (Merguez07) :V3.3 - correction du script suite à evolution du site Electra
** 2022-03-27 (Merguez07) :V3.4 - bug dans le store
** 2022-04-01 (opa95) :V3.5 - corrections mineures, compatible autres sites et EJP
** 2022-04-01 (opa95) :V3.6 - utilisation du site edf tempo et EJP
** 2024-09-10 (opa95) :V3.7 - Utilisation api edf et sites selectra...
*******************************************************************************/
function sdk_jour($time_now,$nbJours = 0,$jourStr = 2) {
//creation date à partir du temps unix décale de $nbJours
//sortie jourFrançais jj/mm
global $days;
$time_now += 86400*$nbJours;
$jour_semaine = date('w',$time_now);
$start = 0;
foreach ($days as $key => $day) {
if ($start == $jour_semaine) {
$jour_semaine = $key;
break;
}
$start ++;
}
switch ($jourStr) {
case 2 : $ret= date('Y-m-d',$time_now);
return $ret;
case 1 : return $jour_semaine.' '.date('d/m',$time_now);
default :
$ret= date('d/m',$time_now);
return $ret;
}
// if ($jourStr ==1 ) return $jour_semaine.' '.date('d/m',$time_now);
// else return date('d/m',$time_now);
// return;
}
function sdk_multiextract($string,$startStr,$stopStr='',&$start,$startIn = false,$stopIn = false) { // Extraire une chaine de caracteres suivant plusieurs separateurs
// startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
// stopStr : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
// renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
// Si outer les balises sont incluses, sinon elles ne sont pas incluses
// start est remis a jour
// eviter les caractères non standards
// si startStr (ou stopStr) de la forme
// array(array('a','b'),array('d','e')) recherche de (a puis b) ou bien (d puis e), si séquence 1 absente
// array('ab', 'ef') recherche de 'ab' puis 'ef'
// 'abc' recherche de 'abc'
$found = true;
if (!is_array($startStr)) {
$startStr = array($startStr);
}
foreach ($startStr as $codes){
if (!is_array($codes)) {
$codes = $startStr;//$codes = array($codes);
}
$beg = $start;
$startPos = '';
foreach ($codes as $code) {
$startLen = strlen($code);
if ( ($startLen != 0) && (($pos = strpos(substr($string,$beg),$code)) !== false) ) {
if ($startPos == '') $startPos = $beg + $pos;
$beg = $beg + $pos + $startLen;
}
else {
$beg = $start;
if ($startPos == '') $startPos = $beg;
$found = false;
break;
}
}
if ($found) break;
}
$start = $beg;
$found = true;
if (!is_array($stopStr)) {
$stopStr = array($stopStr);
}
foreach ($stopStr as $codes){
if (!is_array($codes)) {
$codes = $stopStr;//$codes = array($codes);
}
$end = $start;
$stopPos = '';
foreach ($codes as $code) {
$stopLen = strlen($code);
if ( ($stopLen != 0) && (($pos = strpos(substr($string,$end+1),$code)) !== false) ) {
$end = $end + 1 + $pos;
if ($stopPos == '') $stopPos = $end;
}
else {
$end = $start;
if ($stopPos == '') $stopPos = $end;
$found = false;
break;
}
}
if ($found) break;
}
if ($startIn) $beg = $startPos;
if ($stopIn) $end += $stopLen;
else $end = $stopPos;
$launch = substr($string,$beg,$end-$beg);
return $launch;
}
function sdk_extract($string,$startStr,$stopStr='',$start = 0,$startIn = false,$stopIn = false) { // Ectraire une chaine de caracteres suivant plusieurs separateurs
// appel de sdk_multiextract, start inchangé
$launch = sdk_multiextract($string,$startStr,$stopStr,$start,$startIn,$stopIn );
return $launch;
}
function sdk_multiexplode ($delimiters,$string) { // Separer une chaine de caracteres suivant plusieurs separateurs
// remplacement delimiters[1] par delimiters[0]
// renvoi du tableau rédultat de explode
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
function sdk_format ($string,$field = 'color') { // met en forme selon la semantique du plugin du store
// formatage de date -> format[dayWeek] dayWeek et format[dateJM] jj/mm ou renvoi ND ND
// formatage de couleur tempo -> BLEU, BLANC, ROUGE ND
// formatage de couleur ejp -> NON_EJP, EST_EJP, ND
global $contrat;// tempo ou ejp
global $upc_contrat;// TEMPO ou EJP
global $days;// jour de la semaine
$string = str_replace($upc_contrat,'',trim(strtoupper($string)));
if ($field == 'date') {
if (strlen($string) < 6) $string = 'ND '.$string;
list($format['dayWeek'],$format['dateJM']) = explode(' ',trim($string));
if ($format['dayWeek'] != 'ND') $format['dayWeek'] = $format['dayWeek'][0].strtolower(substr($format['dayWeek'],1));
if (!array_key_exists($format['dayWeek'],$days) ) $format['dayWeek'] = 'ND';
}
else {
$format = "ND";
$string = strtoupper(str_replace(' ','',$string));
if ($contrat == 'ejp') {
if ( ($string == "PASD'") || (strpos($string,'JAMAIS') !== false) ) $format="NON_EJP";
if ($string == "JOUR") $format="EST_EJP";
}
else {
$string = strtoupper($string);
$color = array("1"=>"BLEU","2"=>"BLANC","3"=>"ROUGE","0"=>"ND");
if (is_numeric($string)) {
$string = $string%4;
if ($string>0) return $color[$string];
}
foreach ($color as $col) {
if (strpos($string,$col) !== false) {
$format = $col;
break;
}
}
}
}
return $format;
}
define('MEM','OLD');
define('DEFTYPE','selectran');// format url annexe
define('DEFTIME','3600');//3600 secondes
define('NBB','300');
define('NBW','43');
define('NBR','22');
define('TSTART',6);//début start
define('TSTOP',22);//fin HP
$months = array('janvier' => 'January', 'février' => 'February','mars' => 'March','avril' => 'April','mai' => 'May',
'juin' => 'June','juillet' => 'July','août' => 'August','septembre' => 'September','octobre' => 'October',
'novembre' => 'November','décembre' => 'December');
$days = array('Dimanche' => 'Sunday','Lundi' => 'Monday','Mardi' => 'Tuesday','Mercredi' => 'Wednesday','Jeudi' => 'Tuesday',
'Vendredi' => 'Friday','Samedi' => 'Saturday');
//initialisation des variables
//$start = strlen('exec=edf_');
$source = (array_key_exists('exec',$_GET))? strtolower($_GET['exec']):"";
if (strpos('Z'.$source,'tempo')) $contrat = 'tempo';
elseif (strpos('Z'.$source,'ejp'))$contrat = 'ejp';
else $contrat = "";
$contrats = array('tempo','ejp');
$urls = array('tempo' => array (
'https://www.api-couleur-tempo.fr/api/joursTempo?',
'https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
'https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
'https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran',
'https://www.kelwatt.fr/guide/tempo#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/tempo#selectra',
),
'ejp' => array (
1 => 'https://selectra.info/energie/fournisseurs/edf/ejp#selectra',
'https://observatoires.net#selectra',
'https://observatoires.net/ejp#selectra',
'https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain#selectra',
'https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain#selectra',
'https://www.kelwatt.fr/fournisseurs/edf/ejp#selectra',
'https://electricite.net/edf/tarifs/ejp#selectra',
'https://agence-energie.com/edf/tarifs/ejp#selectra'
)
);
$types = array('selectra','selectran','keskeces');
$contrat_ = strtolower(getArg('contrat',false,""));
$contrat = (($contrat_!="") && (in_array($contrat_,$contrats)))? $contrat_:$contrat;
$debug = getArg('debug',false);
if ( (!$debug) || (!in_array($debug,array(0,1))) ) $debug = 0;
$num_site = abs(getArg('site',false));
if ( (!$num_site) || (($num_site > count($urls[$contrat]) )) ) $num_site = 1;
if ($num_site == 0 ) $scan = 1; else $scan = 0;
$timer = getArg('timer',false,DEFTIME);//Validité du fichier
$upc_contrat = strtoupper($contrat);
$poll = 0;
$reset = getArg('reset',false,0);
if ($reset) {
deleteVariable(MEM.$contrat);
$poll = 1;
}
$simul = getArg('simul',false,0);//Décalage temps secondes
$time_now = time()+$simul;
$annee_now = date('Y',$time_now);//aaaa
$heure_now = date('H',$time_now);//hh
$date_now = sdk_jour($time_now,0,1);// jj/mm
$date_demain = sdk_jour($time_now,1,1);//jour jj/mm
$date_hier = sdk_jour($time_now,-1,0);//jour jj/mm
$nowDate = sdk_jour($time_now,0,0);//jour semaine
$dateDemain = sdk_jour($time_now,1,0);//jour semaine
list($nowDayWeek,$bof) = explode(' ',$date_now);
list($tomorrowDayWeek,$bof) = explode(' ',$date_demain);
$infos_ = array (
'todayDate' => 'ND', 'todayDayWeek' => 'ND',
'todayYear' => 'ND', 'todayColor' => 'ND', 'hphc' =>'HP',
'tomorrowDate' => 'ND', 'tomorrowDayWeek' => 'ND', 'tomorrowYear' => 'ND', 'tomorrowColor' => 'ND',
'yesterdayColor' =>'ND', 'yesterdayRate' => 'ND', 'yesterdayDate' => 'ND',
'nowDate' => 'ND','nowColor'=>'ND', 'tarifnow' => 'ND',
'decRed' => NBR, 'totRed' => NBR, 'remRed' => 'ND',
'decWhite' => NBW, 'totWhite' => NBW, 'remWhite' => 'ND',
'decBlue' => NBB, 'totBlue' => NBB, 'remBlue' => 'ND',
'fileDate' => 'ND', 'fileTimestamp' => 'ND',
'BLEU' => array('HC'=>'0.1296','HP'=>'0.1609'),
'BLANC' => array('HC'=>'0.1486','HP'=>'0.1894'),
'ROUGE' => array('HC'=>'0.1568','HP'=>'0.7562'),
) ;
if (loadVariable(MEM.$contrat)) $infos_ = loadVariable(MEM.$contrat);
else $poll = 1;
$infos_['hphc'] = (($heure_now<TSTART) || ($heure_now>=TSTOP))?'HC':'HP';
if (!$poll && array_key_exists('fileTimestamp',$infos_)){// forçage lecture
$file_hour = date("H",$infos_['fileTimestamp']);
if ($time_now<$infos_['fileTimestamp']) {$poll=1;}// simulation (recul)
elseif (($time_now-$infos_['fileTimestamp'])>$timer) {$poll=1;}// temps expiré
elseif (($file_hour<TSTART) && ($heure_now>=TSTART)) {$poll=1;}// passage à 6h
elseif (($file_hour<TSTOP) && ($heure_now>=TSTOP)) {$poll=1;} // passage à 22h
elseif (($file_hour>$heure_now)) {$poll=1;}// passage à minuit
elseif (($file_hour<12) && ($heure_now>=12)) {$poll=1;} // passage à 12h
}
$heure_lecture = date('H:i:s',$time_now);
if ($poll)
{ $urls['tempo'][0] .= 'dateJour[]='.sdk_jour($time_now,-1).'&dateJour[]='.sdk_jour($time_now).'&dateJour[]='.sdk_jour($time_now,1);
$infos_['todayDate'] = $nowDate; // dd/mm
$infos_['todayDayWeek'] = $nowDayWeek; // Jour ou ND
$infos_['tomorrowDate'] = $dateDemain; // dd/mm
$infos_['tomorrowDayWeek'] = $tomorrowDayWeek; // Jour ou ND
$infos_['yesterdayDate'] = $date_hier;
if ('todayDayWeek' == 'Samedi') $infos_['tomorrowColor'] = 'BLEU';
elseif ('todayDayWeek' == 'Dimanche') $infos_['todayColor'] = 'BLEU';
$response0 = httpQuery($urls['tempo'][0],'GET');
$response0 = sdk_json_decode($response0);
$api_edf = count($response0)>1;
$infos_['yesterdayColor'] = sdk_format($response0[0]['codeJour']);
$bof = sdk_format($response0[1]['codeJour']);
if ($bof!='ND') $infos_['todayColor'] = $bof;
$bof = sdk_format($response0[2]['codeJour']);
if ($bof!='ND') $infos_['tomorrowColor'] = $bof;
for ($i=$num_site;$i<=count($urls[$contrat]);$i++){
if (!$i) $i++;
list($url,$type) = explode('#',$urls[$contrat][$num_site]);
if ( (!$type) || (!in_array($type,$types)) ) $type = DEFTYPE;
$response = trim(httpQuery($url,'GET'));
if (strpos($response,'html') === false) $result = 0;
else {$result = 1;break;}
if ($num_site) break;
}
if ($result) {
$erreur = 0;
switch ($type) {
case 'selectra' :
//lecture block
$sep2 = array(array('<!-- END'),array('<div id="block-'));
$sep = array('<div id="block-'.$contrat,'<div');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
//extraction infos Aujourd'hui
$sep2 ='</';
// date
$sep = array('aujourd',$contrat);// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['todayDate'] = $bof['dateJM']; // dd/mm
$infos_['todayDayWeek'] = $bof['dayWeek']; // Jour ou ND
//couleur
$sep = array('_icon','<span>');// couleur
$infos_['todayColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($infos_['todayColor']);//COUL ou ND
//extraction infos demain
$start = 0;// debut block
// date
$sep = array('demain',$contrat);// jour dd:mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$bof = sdk_format($bof,'date');
$infos_['tomorrowDate'] = $bof['dateJM']; // dd/mm
$infos_['tomorrowDayWeek'] = $bof['dayWeek']; // Jour ou ND
// couleur
$sep = array('_icon','<span>');// couleur
$infos_['tomorrowColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
// bilan
$sep = array('title','>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
if ($contrat == 'ejp') {
list($bof,$bof1) = explode('/',$bof);
$bof1 = trim($bof1);
if (is_numeric($bof1)) $infos_['totRed'] = $bof1;
$bof = trim($bof);
if (is_numeric($bof)) {
$infos_['decRed'] = $infos_['totRed'] - $bof;}
}
//complements
$bof = str_replace('/','-',$infos_['todayDate'].'-'.$annee_now);//date europeenne
$bof = strtotime($bof);
if ($bof > $time_now) $infos_['todayYear'] = $annee_now -1;
else $infos_['todayYear'] = $annee_now;
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
break;
case 'selectran' :
$sep2 = array(array('<!-- END'),array('<div class='));
$sep = array('"intro">','hui, ');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$err_num = 1;
if (strlen($block) == 0) {$erreur = $err_num;break;}
if ($api_edf){
$sep = array('il reste');// jour dd/mm
$sep2 =array('</p>');
$block = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$start=0;
$sep2 =array('</');
}else{
//lecture block
//extraction infos Aujourd'hui
// date
$sep = array('hui, ');// jour dd/mm
$sep2 = array(',');// jour dd/mm
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$jour = explode(" ",$bof);
$jour[1] = $months[$jour[1]];
$date = strtotime($jour[0]." ".$jour[1]." ".$jour[2]);
//couleur
$sep = array('est');// couleur
$sep2 ='</';
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$infos_['todayColor'] = sdk_format($bof);//COUL ou ND
//extraction infos demain
// date
// couleur
$sep = array('sera');// couleur
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$infos_['tomorrowColor'] = sdk_format($bof);
}
// bilan
$sep = array('<strong>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
for ($i =0;$i<3;$i++) {
$bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
$nb = (int)$bof;
if (strpos($bof,'bleu')>1) $infos_['remBlue'] = $nb;
elseif (strpos($bof,'rouge')>1) $infos_['remRed'] = $nb;
elseif (strpos($bof,'blanc')>1) $infos_['remWhite'] = $nb;
}
$infos_['decRed'] = $infos_['totRed'] - $infos_['remRed'];
$infos_['decWhite'] = $infos_['totWhite'] - $infos_['remWhite'];
$infos_['decBlue'] = $infos_['totBlue'] - $infos_['remBlue'];
$sep2 = array(array('<!-- END'),array('</tr'));
$sep = array('<th>Abonnement','<strong>','<strong>','</td>');
$start = 0;
$block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
$sep2 = array(' ');
$sep = array('<td>');
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLEU']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['BLANC']['HP'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HC'] = $bof;
$bof = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
if ($bof>0) $infos_['ROUGE']['HP'] = $bof;
break;
case 'keskeces' :
//lecture block1
$sep = array("<div class='cont' onclick=","Aujourd'hui");
$sep2 = "<div class='cont' onclick=";
$startBlock = 0;
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
if (strlen($block == 0) ) {$erreur = 1;break;}
//extraction dates et couleur
$sep2 = '</';
$sep = '';
$start = 0;
$infos_['todayDate'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
$sep = array('Jour','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['todayColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['todayColor'] = sdk_format($infos_['todayColor']);
$sep = array('Lendemain','<div','>');//Bleu Blanc Rouge Indeterminé
$infos_['tomorrowColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
$infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
$date_array = explode(' ',$infos_['todayDate']);//Jour J mois aaaa (français)
$bof = strtotime($date_array[1].' '.$months[$date_array[2]].' '.$date_array[3]);
$infos_['todayDayWeek'] = $date_array[0];
$infos_['todayDate'] = sdk_jour($bof,0,false);//jour JJ/MM
$infos_['todayYear'] = $date_array[3];
$infos_['tomorrowDate'] = sdk_jour($bof,1,false);
$infos_['tomorrowYear'] = $infos_['todayYear'];
if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
//lecture block2
$sep = array("<div class='cont' onclick=",'Tempo','Jours');
$sep2 = "<div class='cont pub'";
$block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
//bilan
$sep2 = '</';
$start = 0;
$sep = array('bj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decBlue'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totBlue'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decBlue'];//nn
$start = 0;
$sep = array('wj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decWhite'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totWhite'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decWhite'];//nn
$start = 0;
$sep = array('rj','<b>');//Bleu Blanc Rouge Indeterminé
$infos_['decRed'] = sdk_multiextract($block,$sep,$sep2,$start);//nn
$infos_['totRed'] = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decRed'];//nn
$sep = array('/table',':');//J mois aaaa à hhhmm(français)
$infos_['fileDate'] = trim(sdk_multiextract($block,$sep,'<',$start));//MaJ $start
$date_array = explode(' ',$infos_['fileDate']);//array JJ mois aaaa à hhhmm
$bof = strtotime($date_array[0].' '.$months[$date_array[1]].' '.$date_array[2]);
$infos_['heureFile'] = str_replace('h',':',$date_array[4]);//hh:mm
$infos_['fileDate'] = sdk_jour($bof,0);
break;
}
}
if ($heure_now<TSTART) {
if ($infos_['nowDate'] != $infos_['yesterdayDate']){
$infos_['nowDate'] = $infos_['yesterdayDate'];
$infos_['nowColor'] = $infos_['yesterdayColor'];
// $infos_['tarifNow'] = $infos_['yesterdayRate'];
}
}elseif ($infos_['nowDate'] != $infos_['todayDate']){
$infos_['nowDate'] = $infos_['todayDate'];
$infos_['nowColor'] = $infos_['todayColor'];
// $infos_['tarifNow'] = $infos_['tarifToday'];
}
if ( ($infos_['todayColor'] == 'ND') || ($infos_['tomorrowColor'] == 'ND') ) {
$result = 0;
}
$infos_['fileTimestamp'] = $time_now;;
$infos_['fileDate'] = date('Y-m-d H:i:s',$infos_['fileTimestamp']);
//var_dump($infos_);
saveVariable(MEM.$contrat,$infos_);
}
// Génération du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xml .= "<root>\n";
$xml .= '<'.$contrat.'>'."\n";
$xml .= ' <aujourdhui>'.$infos_['todayColor']."</aujourdhui>\n";
$xml .= ' <date_aujourdhui>'.$infos_['todayDate']."</date_aujourdhui>\n";
$xml .= ' <demain>'.$infos_['tomorrowColor']."</demain>\n";
$xml .= ' <date_demain>'.$infos_['tomorrowDate']."</date_demain>\n";
$xml .= ' <now>'.$infos_['nowColor']."</now>\n";
$xml .= ' <date_now>'.$infos_['nowDate']."</date_now>\n";
if ($contrat == 'ejp') {
$xml .= ' <decompte>'.$infos_['decRed']."</decompte>\n";
}
else {
$xml .= " <decompte_bleu>".$infos_['decBlue']."</decompte_bleu>\n";
$xml .= " <decompte_blanc>" .$infos_['decWhite']."</decompte_blanc>\n";
$xml .= ' <decompte_rouge>' .$infos_['decRed']."</decompte_rouge>\n";
$xml .= " <reste_bleu>" .$infos_['remBlue']."</reste_bleu>\n";
$xml .= " <reste_blanc>" .$infos_['remWhite']."</reste_blanc>\n";
$xml .= ' <reste_rouge>' .$infos_['remRed']."</reste_rouge>\n";
$xml .= ' <type>'.$contrat."</type>\n";
$xml .= ' <hphc>'.$infos_['hphc']."</hphc>\n";
$xml .= ' <tarifs_aujourdhui>'.$infos_[$infos_['todayColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_aujourdhui>\n";
$xml .= ' <tarifs_demain>'.$infos_[$infos_['tomorrowColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_demain>\n";
$xml .= ' <tarif_now>'.$infos_[$infos_['nowColor']][$infos_['hphc']]."</tarif_now>\n";
$xml .= ' <bleu_hc>'.$infos_['BLEU']['HC']."</bleu_hc>\n";
$xml .= ' <bleu_hp>'.$infos_['BLEU']['HP']."</bleu_hp>\n";
$xml .= ' <blanc_hc>'.$infos_['BLANC']['HC']."</blanc_hc>\n";
$xml .= ' <blanc_hp>'.$infos_['BLANC']['HP']."</blanc_hp>\n";
$xml .= ' <rouge_hc>'.$infos_['ROUGE']['HC']."</rouge_hc>\n";
$xml .= ' <rouge_hp>'.$infos_['ROUGE']['HP']."</rouge_hp>\n";
}
$xml .='</'.$contrat.'>'."\n";
$xml .= "<debug>\n";
$xml .= ' <date_fichier>'.$infos_['fileDate']."</date_fichier>\n";
$xml .= ' <timestamp>'.$infos_['fileTimestamp']."</timestamp>\n";
$xml .= ' <date_lecture>'.$date_now." ".$heure_lecture."</date_lecture>\n";
$xml .= ' <url>'.htmlentities($urls['tempo'][0])."</url>\n";
$xml .= ' <url_>'.htmlentities($url)."</url_>\n";
$xml .= ' <result>'.$result."</result>\n";
if ($debug) {
$xml .= ' <source>' .$source ."</source>\n";
$xml .= " <response> " .substr($response,0,100) .".....\n </response>\n";
foreach ($infos_ as $key => $info){
$xml .= ' <test_'.$key.'>' .$info ."</test_".$key.">\n";
}
$xml .= " <debugLen>" .strlen($block) ."</debugLen>\n";
$xml .= " <debugStr>\n" .$block ."\n </debugStr>\n";
foreach ($urls[$contrat] as $key => $url) {
$xml .= ' <url_'.$key.'>'.$url ."</url_".$key.">\n";
}
}
$xml .= "</debug>\n";
$xml .= "</root>\n";
echo $xml;
?>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tempo>
<aujourdhui>BLEU</aujourdhui>
<date_aujourdhui>11/09</date_aujourdhui>
<demain>BLEU</demain>
<date_demain>12/09</date_demain>
<now>BLEU</now>
<date_now>11/09</date_now>
<decompte_bleu>11</decompte_bleu>
<decompte_blanc>0</decompte_blanc>
<decompte_rouge>0</decompte_rouge>
<reste_bleu>289</reste_bleu>
<reste_blanc>43</reste_blanc>
<reste_rouge>22</reste_rouge>
<type>tempo</type>
<hphc>HP</hphc>
<tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui>
<tarifs_demain>0.1609/0.1296</tarifs_demain>
<tarif_now>0.1609</tarif_now>
<bleu_hc>0.1296</bleu_hc>
<bleu_hp>0.1609</bleu_hp>
<blanc_hc>0.1486</blanc_hc>
<blanc_hp>0.1894</blanc_hp>
<rouge_hc>0.1568</rouge_hc>
<rouge_hp>0.7562</rouge_hp>
</tempo>
<debug>
<date_fichier>2024-09-11 18:26:02</date_fichier>
<timestamp>1726071962</timestamp>
<date_lecture>Mercredi 11/09 18:26:02</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-10&dateJour[]=2024-09-11&dateJour[]=2024-09-12</url>
<url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_>
<result>1</result>
</debug>
</root>
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)