271 lines
11 KiB
PHP
271 lines
11 KiB
PHP
#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
|
|
<?php
|
|
include_once(FWK_PATH.'common/chiffres.php');
|
|
include_once(FWK_PATH.'common/dates.php');
|
|
include_once(INCLUDE_PATH.'bodacc/classMBodacc.php');
|
|
include_once(INCLUDE_PATH.'insee/classMInsee.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMBourse.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
$repImgDrapeaux='/home/data/logos/drapeaux/';
|
|
$tabJour=array(0=>'Dim', 1=>'Lun', 2=>'Mar', 3=>'Mer', 4=>'Jeu', 5=>'Ven', 6=>'Sam');
|
|
|
|
function getPrevDate($dateCour, $nbJours=1) {
|
|
$nextDate=date('Ymd', mktime(0, 0, 0, WDate::dateT('Ymd','m', $dateCour), WDate::dateT('Ymd','d', $dateCour)-$nbJours, WDate::dateT('Ymd','Y', $dateCour)));
|
|
return $nextDate;
|
|
}
|
|
|
|
$tmin=10;
|
|
$tmax=60;
|
|
set_time_limit(0);
|
|
$pays=$history=false;
|
|
$dateDeb=getPrevDate(date('Ymd'), rand(2,10));
|
|
$dateF=getPrevDate(date('Ymd'));
|
|
|
|
$strInfoProg='Usage : '.basename($argv[0]). " [OPTION]
|
|
Recupère les cours des devises par rapport à l'euro.
|
|
|
|
Sans aucun paramètre, récupère le dernier cours pour chaque devise par rapport à l'euro.
|
|
Sinon:
|
|
-d:JJ/MM/AAAA Date de début de période (*)
|
|
-f:JJ/MM/AAAA Date de fin de période (*)
|
|
-n:X Intervalle MIN en secondes entre les requêtes (défaut=$tmin)
|
|
-i:X \" MAX \" \" \" \" \" (défaut=$tmax)
|
|
-p Récupération de la dernière liste des pays (par défaut, une fois par mois, le 1er du mois)
|
|
-h Récupération de l'historique complet
|
|
-c=DEV Récupération limité à la devise passée en paramètre
|
|
|
|
* : par défaut, le programme récupère le dernier cour pour le jour précédent !
|
|
";
|
|
$tabCurrency=array();
|
|
$argv=$_SERVER['argv'];
|
|
if ($_SERVER['argc']==1) $dernierCour=true;
|
|
else {
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (substr($argv[$i],1,1)) {
|
|
case 'd':
|
|
$dateDebut=substr($argv[$i],3,10);
|
|
$dateDeb=WDate::dateT('d/m/Y', 'Ymd', $dateDebut);
|
|
break;
|
|
case 'f':
|
|
$dateFin=substr($argv[$i],3,10);
|
|
$dateF=WDate::dateT('d/m/Y', 'Ymd', $dateFin);
|
|
break;
|
|
case 'n':
|
|
$tmin=trim(substr($argv[$i],3))*1;
|
|
if ($min<0) $tmin=0;
|
|
break;
|
|
case 'i':
|
|
$tmax=trim(substr($argv[$i],3))*1;
|
|
if ($tmax<5) $tmax=2;
|
|
break;
|
|
case 'p':
|
|
$pays=true;
|
|
break;
|
|
case 'h':
|
|
$history=true;
|
|
break;
|
|
case '-':
|
|
die($strInfoProg);
|
|
break;
|
|
default:
|
|
die('Option '. $argv[$i] . " inconnue !\n");
|
|
break;
|
|
}
|
|
} else {
|
|
$tabCurrency[]=$argv[$i];
|
|
}
|
|
}
|
|
}
|
|
|
|
$iDb=new WDb('sdv1');
|
|
$iDb2=new WDb();
|
|
|
|
/** Une fois par mois, récupéreation de la liste des pays et de leur devises
|
|
**/
|
|
if($pays || date('d')*1==1) {
|
|
echo (date('Y/m/d - H:i:s') .' - Début de la mise à jour des pays et de leur devise !'. EOL);
|
|
$crea=$maj=0;
|
|
$url= 'http://fxtop.com/fr/showpays.php3';
|
|
$referer= '';
|
|
$page=getUrl($url, '', '', $referer, false, 'fxtop.com');
|
|
$body=$page['body'];
|
|
$referer='http://fxtop.com/fr/showpays.php3';
|
|
|
|
$strTmp=@getTextInHtml($body, '<TABLE border=1 cellpadding=0 cellSpacing=0 >', ' >', '</TABLE>');
|
|
$tabTmp=explode('<TR><TD>', $strTmp);
|
|
foreach ($tabTmp as $i=>$strTmp) {
|
|
$tabLigne=explode('</TD><TD>', $strTmp);
|
|
if ($i==0) {
|
|
if (trim($strTmp)<>'')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : La première ligne du tableau n\'est pas vide : "'.$strTmp.'" trouvé !'. EOL);
|
|
continue;
|
|
} elseif ($i==1) {
|
|
// On vérifie que les noms de colonnes et les devises attendues sont les bonnes
|
|
if (trim(strip_tags($tabLigne[0]))<>'Pays')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Pays" attendue mais "'.strip_tags($tabLigne[0]).'" trouvé !'. EOL);
|
|
if (trim(strip_tags($tabLigne[1]))<>'Zone')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Zone" attendue mais "'.strip_tags($tabLigne[1]).'" trouvé !'. EOL);
|
|
if (trim(strip_tags($tabLigne[2]))<>'Devise')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Devise" attendue mais "'.strip_tags($tabLigne[2]).'" trouvé !'. EOL);
|
|
if (trim(strip_tags($tabLigne[3]))<>'Drapeau')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Drapeau" attendue mais "'.strip_tags($tabLigne[3]).'" trouvé !'. EOL);
|
|
if (trim(strip_tags($tabLigne[4]))<>'Code Nic')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Code Nic" attendue mais "'.strip_tags($tabLigne[4]).'" trouvé !'. EOL);
|
|
|
|
} else {
|
|
$libPays=trim(strip_tags($tabLigne[0]));
|
|
$libZone=trim(strip_tags($tabLigne[1]));
|
|
$devise =trim(strip_tags($tabLigne[2]));
|
|
$urlDrap=$tabLigne[3];
|
|
$strTmp=str_replace('<IMG SRC="../ico/', 'http://fxtop.com/ico/', $urlDrap);
|
|
$tabTmp2=explode('"', $strTmp);
|
|
$url=$tabTmp2[0];
|
|
$codPays=trim(strip_tags($tabLigne[4]));
|
|
$ficImgDrapeaux=basename($url);
|
|
|
|
if (!file_exists($repImgDrapeaux.$ficImgDrapeaux)) {
|
|
$page=getUrl($url, '', '', $referer, false, 'fxtop.com');
|
|
$body=$page['body'];
|
|
$fp=fopen($repImgDrapeaux.$ficImgDrapeaux, 'wb');
|
|
fwrite($fp, $page['body']);
|
|
fclose($fp);
|
|
$taille=filesize($repImgDrapeaux.$ficImgDrapeaux);
|
|
echo(date('Y/m/d - H:i:s') ." - Drapeaux $codPays : $ficImgDrapeaux ($libPays) créé ($taille octets).". EOL);
|
|
}
|
|
|
|
$tabUpdate=array( 'libPaysMajAuto'=>$libPays,
|
|
'zone'=>$libZone,
|
|
'drapeau'=>$ficImgDrapeaux,
|
|
'devise'=>$devise,
|
|
);
|
|
$tabInsert=array_merge($tabUpdate, array('codPays'=>$codPays, 'dateInsert'=>date('YmdHis')));
|
|
if (!$iDb2->insert('tabPays', $tabInsert)) {
|
|
if (!$iDb2->update('tabPays', $tabUpdate, "codPays='$codPays'", true)) {
|
|
if (mysql_errno()<>1062)
|
|
die(date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .' : '. mysql_error() . EOL);
|
|
} else
|
|
$maj++;
|
|
} else {
|
|
echo (date('Y/m/d - H:i:s') ." - Création du pays $libPays ($codPays) en $libZone !". EOL);
|
|
$crea++;
|
|
}
|
|
}
|
|
}
|
|
echo (date('Y/m/d - H:i:s') ." - Fin de la mise à jour des pays et de leur devise : $crea création(s) / $maj MAJ.". EOL);
|
|
}
|
|
|
|
|
|
/** Récupération de la liste des devises
|
|
**/
|
|
echo (date('Y/m/d - H:i:s') .' - Début de la mise à jour de la liste des devise !'. EOL);
|
|
$crea=$maj=0;
|
|
$tabDevisesSite=array();
|
|
$url= 'http://fxtop.com/fr/historates.php3';
|
|
$referer= '';
|
|
$page=getUrl($url, '', '', $referer, false, 'fxtop.com');
|
|
$body=$page['body'];
|
|
$strTmp=@getTextInHtml($body, '<select name=C1 >', 'C1 >', '</select>');
|
|
$tabTmp=preg_split('/<option (selected | )value="/i', $strTmp);
|
|
foreach ($tabTmp as $i=>$strTmp) {
|
|
$tabLigne=explode('">', $strTmp);
|
|
if ($i==0) {
|
|
if (trim($strTmp)<>'')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : La première ligne du tableau n\'est pas vide : "'.$strTmp.'" trouvé !'. EOL);
|
|
continue;
|
|
} else {
|
|
$devise =trim($tabLigne[0]);
|
|
$libDevPays=trim(strip_tags($tabLigne[1]));
|
|
if ($devise<>'' && $devise<>'EUR') $tabDevisesSite[]=$devise;
|
|
$tabUpdate=array( 'devIso'=>$devise,
|
|
'devNomPays'=>$libDevPays,
|
|
);
|
|
if (!$iDb->update('devise_liste', $tabUpdate, "devIso='$devise'", true)) {
|
|
if (!$iDb->insert('devise_liste', $tabUpdate)) {
|
|
if (mysql_errno()<>1062)
|
|
die(date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .' : '. mysql_error() . EOL);
|
|
} else {
|
|
echo (date('Y/m/d - H:i:s') ." - Création de la devise $devise pour $libDevPays !". EOL);
|
|
$crea++;
|
|
}
|
|
} else $maj++;
|
|
}
|
|
}
|
|
echo (date('Y/m/d - H:i:s') ." - Fin de la mise à jour des devises : $crea création(s) / $maj MAJ.". EOL);
|
|
|
|
/** Récupération d'une devise ou de toutes les devises
|
|
**/
|
|
if ( !is_array($tabCurrency) || count($tabCurrency)==0 ) {
|
|
//$tabDevises=mysql_select('tabPays', 'DISTINCT(devise) as dev', "devise<>'EUR' AND devise<>''");
|
|
// AND devise NOT IN ('AED','AFA','XCD','ALL','AMD','ANG','AON')
|
|
$tabDevises=array();
|
|
shuffle($tabDevisesSite);
|
|
foreach ($tabDevisesSite as $i=>$deviseSite)
|
|
$tabDevises[]=array(0=>$deviseSite);
|
|
unset($tabDevisesSite);
|
|
} else {
|
|
foreach ($tabCurrency as $currency) {
|
|
if (in_array ($currency, $tabDevisesSite))
|
|
$tabDevises[]=array(0=>$currency);
|
|
else
|
|
die(date('Y/m/d - H:i:s') ." - ERREUR : Devise '$currency' non gérée par le site distant !". EOL);
|
|
}
|
|
}
|
|
/** Récupération de l'historique des cours ou du cours précédent
|
|
**/
|
|
if ($history) $dateDeb='19900101';
|
|
$DD1=WDate::dateT('Ymd','d', $dateDeb);
|
|
$MM1=WDate::dateT('Ymd','m', $dateDeb);
|
|
$YYYY1=WDate::dateT('Ymd','Y', $dateDeb);
|
|
$DD2=WDate::dateT('Ymd','d', $dateF);
|
|
$MM2=WDate::dateT('Ymd','m', $dateF);
|
|
$YYYY2=WDate::dateT('Ymd','Y', $dateF);
|
|
|
|
foreach ($tabDevises as $tabDevise) {
|
|
$devise=$tabDevise[0];
|
|
if ($dateDeb==$dateF)
|
|
echo (date('Y/m/d - H:i:s') ." - Récupération du cour du $devise par rapport à l'euro pour le $DD1/$MM1/$YYYY1...". EOL);
|
|
else
|
|
echo (date('Y/m/d - H:i:s') ." - Récupération du cour du $devise par rapport à l'euro pour la période du $DD1/$MM1/$YYYY1 au $DD2/$MM2/$YYYY2...". EOL);
|
|
$url= "http://fxtop.com/fr/historates.php3?C1=$devise&C2=EUR&DD1=$DD1&MM1=$MM1&YYYY1=$YYYY1&DD2=$DD2&MM2=$MM2&YYYY2=$YYYY2&btnOK=Chercher";
|
|
$referer= 'http://fxtop.com/fr/historates.php3';
|
|
randsleep($tmin, $tmax);
|
|
$page=getUrl($url, '', '', $referer, false, 'fxtop.com');
|
|
$body=$page['body'];
|
|
|
|
$strTmp=@getTextInHtml($body, '<BR><TABLE border=1><TR><TD><STRONG>Date</STRONG></TD><TD><STRONG>', '<STRONG>', '</TABLE>');
|
|
$tabTmp=explode('</TD></TR><TR><TD>', $strTmp);
|
|
$nbCours=0;
|
|
foreach ($tabTmp as $i=>$strTmp) {
|
|
$tabLigne=explode('</TD><TD>', $strTmp);
|
|
if ($i==0) {
|
|
// On vérifie que les noms de colonnes et les devises attendues sont les bonnes
|
|
if (strip_tags($tabLigne[0])<>'Date')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "Date" attendue mais "'.strip_tags($tabLigne[0]).'" trouvé !'. EOL);
|
|
if (strip_tags($tabLigne[1])<>$devise.'/EUR')
|
|
die(date('Y/m/d - H:i:s') .' - ERREUR : Zone "'.$devise.'/EUR" attendue mais "'.strip_tags($tabLigne[1]).'" trouvé !'. EOL);
|
|
} else {
|
|
$date=$tabLigne[0];
|
|
if ($i==1) $dateMax=$date;
|
|
$conv=$tabLigne[1];
|
|
//echo "$devise;$date;$conv\n";
|
|
$nbCours++;
|
|
|
|
$tabInsert=array( 'devise'=>$devise,
|
|
'date'=>$date,
|
|
'valeur'=>$conv,
|
|
);
|
|
if (!$iDb->insert('devise_cours', $tabInsert))
|
|
if (mysql_errno()<>1062)
|
|
die(date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .' : '. mysql_error() . EOL);
|
|
}
|
|
}
|
|
$dateMin=$date;
|
|
if ($nbCours==1)
|
|
echo (date('Y/m/d - H:i:s') ." - Devise $devise : 1 valeur ($conv) du $dateMin au $dateMax...". EOL);
|
|
else
|
|
echo (date('Y/m/d - H:i:s') ." - Devise $devise : $nbCours valeurs du $dateMin au $dateMax...". EOL);
|
|
}
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script.'. EOL;
|
|
?>
|