Current path: home/webdevt/cryptoimpot.fr/module/Application/src/Service/
?? Go up: /home/webdevt/cryptoimpot.fr/module/Application/src
<?php
namespace Application\Service;
use Application\Entity\CoursDevise;
use Application\Entity\Devise;
use Application\Entity\Source;
use Application\Mapper\CoursDeviseMapper;
use Application\Mapper\SourceMapper;
use Application\Service\ApiHistorical\APINomicsService;
use Application\Service\ApiHistorical\CMCService;
use Application\Service\ApiHistorical\CoinAPIService;
use Application\Service\ApiHistorical\ExchangeRatesAPIService;
use Application\Service\ApiHistorical\MinAPICryptoCompareService;
use Doctrine\ORM\EntityManager;
/**
* Description of ExchangeRateService
*
* @author jimmy
*/
class ExchangeRateService
{
public function __construct(EntityManager $entityManager, $mapperCoursDevise=null)
{
if (empty($mapperCoursDevise)) {
$mapperCoursDevise = new CoursDeviseMapper($entityManager);
}
$this->entityManager = $entityManager;
$this->mapperCoursDevise = $mapperCoursDevise;
$this->sourceMapper = new SourceMapper($this->entityManager);
$this->CMCService = new CMCService();
$this->CoinAPIService = new CoinAPIService();
$this->APINomicsService = new APINomicsService();
$this->MinAPICryptoCompareService = new MinAPICryptoCompareService($this->entityManager, $this->mapperCoursDevise,$this->sourceMapper);
$this->ExchangeRatesAPIService = new ExchangeRatesAPIService($this->entityManager, $this->mapperCoursDevise,$this->sourceMapper);
$this->sourceManuel = $this->sourceMapper->findById(2);
$this->sourceNonTrouve = $this->sourceMapper->findById(5);
}
public function insertCoursDevise(Devise $devise, \DateTime $dateTime, $prixUnitaireEuro, Source $source)
{
$insertCoursDevise = new CoursDevise();
$insertCoursDevise->setDateCours($dateTime);
$insertCoursDevise->setDevise($devise);
$insertCoursDevise->setCoursEuro($prixUnitaireEuro);
$insertCoursDevise->setSource($source);
$this->mapperCoursDevise->insert($insertCoursDevise);
}
public function getPriceInEuroFromDevise(Devise $devise, \DateTime $dateTime)
{
$dateTimeMinuit = new \DateTime($dateTime->format('Y-m-d'). '00:00:00');
//@todo call data market
// on récupère le prix approximatif de la journée
//@todo récupérer le prix à l'heure précise
// $coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $datetimeclone->setTime(0, 0, 0));
$coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $dateTime);
if (!empty($coursDevise)) {
// var_dump($coursDevise->coursEuro);
// exit;
// if ($devise->getCode() == 'PRL') {
// echo $coursDevise->coursEuro; exit;
// }
//echo 'cours';
return $coursDevise->coursEuro;
}
// On essaie avec coinMarketCap Pro
try {
$this->CMCService->getUnitPriceInEur($devise, $dateTime);
} catch (\Exception $e) {
//echo $e->getMessage();
}
//
// try {
// $this->CoinAPIService->getUnitPriceInEur($devise, $dateTime);
// } catch (\Exception $e) {
// echo 'ok';
//
// }
//
// try {
// $this->APINomicsService->getUnitPriceInEur($devise, $dateTime);
// } catch (\Exception $e) {
// echo 'ok';
//
// }
try {
$unitPrice = $this->MinAPICryptoCompareService->getUnitPriceInEur($devise, $dateTime);
return $unitPrice;
} catch (\Exception $e) {
//$unitPrice = null;
//echo $e->getMessage();
}
try {
$unitPrice = $this->ExchangeRatesAPIService->getUnitPriceInEur($devise, $dateTime);
return $unitPrice;
} catch (\Exception $e) {
// echo $e->getMessage();
}
$coursDevise2 = $this->mapperCoursDevise->findByDeviseAndDate($devise, $dateTimeMinuit);
if (!empty($coursDevise2)) {
$this->insertCoursDevise($devise, $dateTime, $coursDevise2->coursEuro, $this->sourceManuel);
return $coursDevise2->coursEuro;
} else {
if ($devise->getCode() == 'PRL' && $dateTime > new \DateTime('2019-01-01')) {
$this->insertCoursDevise($devise, $dateTime, 0, $this->sourceManuel);
return 0;
}
if ($devise->getCode() == 'STR') {
$this->insertCoursDevise($devise, $dateTime, 0, $this->sourceNonTrouve);
return 0;
}
$this->insertCoursDevise($devise, $dateTime, 0, $this->sourceNonTrouve);
return 0;
}
// on essaye avec la valeur moyenne
//echo 'tutu';
//
// if (!empty($coursDevise)) {
//
// echo 'tata';
//
// $this->insertCoursDevise($devise, $dateTime, $coursDevise->coursEuro, $this->sourceManuel);
//// var_dump($coursDevise->coursEuro);
//// exit;
//// if ($devise->getCode() == 'PRL') {
//// echo $coursDevise->coursEuro; exit;
//// }
// return $coursDevise->coursEuro;
// }
echo '------------------------------------'; exit;
//echo 'toto';
// $urlApi = 'https://api.exchangeratesapi.io/';
// // asset fsym
//
// $urlApi .= $dateTime->format('Y-m-d');
// $urlApi .= '?base=EUR';
// $urlApi .= '&symbols=' . $currency;
//
//
// // fetch data
// $curl = curl_init();
// curl_setopt($curl, CURLOPT_URL, $urlApi);
// curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// $rawData = curl_exec($curl);
// curl_close($curl);
//
//// decode to array
// $data = json_decode($rawData, true);
// //var_dump($data); exit;
// if (!isset($data['rates'][$currency])) {
// goto api2;
// //throw new Exception('Market value not found');
// //var_dump($data['rates']);
// //echo $dateTime->format('Y-m-d');
// $price = 0;
// } else {
// return $data['rates'][$currency];
// }
// api2:
//
// $urlApi = 'https://free.currconv.com/api/v7/convert?q=' . $currency . '_EUR&compact=ultra&date=' . $dateTime->format('Y-m-d') . '&apiKey=29fd6d6377feb3c18f3e';
// // asset fsym
//
//// $urlApi .= $dateTime->format('Y-m-d');
//// $urlApi .= '?base=EUR';
//// $urlApi .= '&symbols=' . $currency;
//
//
// // fetch data
// $curl = curl_init();
// curl_setopt($curl, CURLOPT_URL, $urlApi);
// curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// $rawData = curl_exec($curl);
// curl_close($curl);
//
//// decode to array
// $data = json_decode($rawData, true);
//// var_dump($data); exit;
// //var_dump($data); exit;
// if (!isset($data['rates'][$currency])) {
// throw new \Exception('Taux de change currconv non trouvé.');
// //throw new Exception('Market value not found');
// //var_dump($data['rates']);
// //echo $dateTime->format('Y-m-d');
// $price = 0;
// } else {
//
// return $data['rates'][$currency];
// }
}
public function getPrice($devise, \DateTime $datetime)
{
// debug sinon update le datetime ext à la fonction
$datetimeclone = clone $datetime;
//var_dump($devise->getCode());
//@todo call data market
//$value = 0;
// on récupère le prix approximatif de la journée
//@todo récupérer le prix à l'heure précise
$coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $datetimeclone->setTime(0, 0, 0));
//echo 'cours';
if (!empty($coursDevise)) {
// var_dump($coursDevise->coursEuro); exit;
return $coursDevise->coursEuro;
}
$insertCoursDevise = new CoursDevise();
$insertCoursDevise->setDateCours($datetimeclone);
$insertCoursDevise->setDevise($devise);
// Si pas en base getPrice via API cryptomarketcap
try {
if (!empty($devise->getIdCMC())) {
$price = $this->CMCService->getPriceByIdCMC($devise->getIdCMC(), $datetimeclone, $devise);
if (!empty($price)) {
$insertCoursDevise->setCoursEuro($price);
$coursDevise->insert($insertCoursDevise);
echo 'getIdCMC';exit;
return $price;
}
}
} catch (\Exception $e) {
try {
if (!empty($devise->getCode())) {
//echo 'coin API';
$price = $this->CoinAPIService->getPriceByCode($devise->getCode(), $datetimeclone);
$insertCoursDevise->setCoursEuro($price);
$coursDevise->insert($insertCoursDevise);
echo 'titi';exit;
return $price;
}
} catch (\Exception $e) {
throw new \Exception('prix non trouvé : ' . $devise->getCode() . ' le : ' . $datetime->format('d-m-Y H:i:s'));
}
}
//$this->pdo->query('SELECT id FROM crypto WHERE code = "'.$asset.'"', PDO::FETCH_ASSOC
/*
$arrayMarket = array(
'2019-04-09' => array('XXBT' => 3300, 'XETH' => 160, 'XLTC' => 290),
'2019-04-10' => array('XXBT' => 4000, 'XETH' => 190, 'XLTC' => 295),
'2019-04-11' => array('XXBT' => 4100, 'XETH' => 410, 'XLTC' => 300),
'2019-04-12' => array('XXBT' => 4050, 'XETH' => 480, 'XLTC' => 300),
'2019-04-13' => array('XXBT' => 4200, 'XETH' => 600, 'XLTC' => 320),
'2019-04-14' => array('XXBT' => 4230, 'XETH' => 250, 'XLTC' => 400),
'2019-04-15' => array('XXBT' => 3900, 'XETH' => 200, 'XLTC' => 500),
'2019-04-16' => array('XXBT' => 3000, 'XETH' => 450, 'XLTC' => 510),
'2019-04-17' => array('XXBT' => 2500, 'XETH' => 400, 'XLTC' => 520),
);
if (empty($arrayMarket[$datestr]) || empty($arrayMarket[$datestr][$asset])) {
throw new Exception('Market value not found');
}
* */
//$currentTime
/*
BTC ETH LTC
3300 160 290
4000 190 295
4100 410 300
4050 480 300
4200 600 320
4230 250 400
3900 200 500
3000 450 510
2500 400 520
* */
// if ($asset === 'XETH'){
// $value = 160;
// }
}
}