batch/1.1/old/getDevises.php
2013-06-19 08:24:49 +00:00

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;
?>