Add currency test data and enhance FetchCurrencyRates job with TCMB integration
- Introduced a new JSON file containing currency rates for various currencies, including USD, EUR, and GBP, to standardize currency data representation. - Enhanced the FetchCurrencyRates job to fetch USD data from TCMB if not available, improving data reliability. - Added logging for TCMB data fetching process to assist in monitoring and debugging. These changes collectively improve the accuracy and robustness of currency rate handling in the Truncgil Finance application.
This commit is contained in:
@@ -20,7 +20,7 @@ class FetchCurrencyRates implements ShouldQueue
|
||||
$data = [];
|
||||
$data['Update_Date'] = now()->format('Y-m-d H:i:s');
|
||||
|
||||
// Döviz kurları
|
||||
// Döviz kurları - ana kaynak
|
||||
$response = $this->fetchData('https://kur.doviz.com');
|
||||
|
||||
// DOM işlemleri için veri çekme
|
||||
@@ -53,11 +53,24 @@ class FetchCurrencyRates implements ShouldQueue
|
||||
}
|
||||
}
|
||||
|
||||
// Eğer USD verisi yoksa veya boşsa, TCMB'den veri çek
|
||||
if (!isset($data['USD']) || empty($data['USD']['Buying'])) {
|
||||
\Log::info('USD verisi bulunamadı, TCMB\'den veri çekiliyor...');
|
||||
$tcmbData = $this->fetchFromTCMB();
|
||||
if (!empty($tcmbData)) {
|
||||
\Log::info('TCMB\'den ' . count($tcmbData) . ' kur alındı');
|
||||
$data = array_merge($data, $tcmbData);
|
||||
} else {
|
||||
\Log::error('TCMB\'den veri alınamadı');
|
||||
}
|
||||
}
|
||||
|
||||
// AZN kuru için
|
||||
$aznResponse = $this->fetchData('https://wise.com/tr/currency-converter/azn-to-try-rate?amount=1');
|
||||
preg_match('/(\d+\.\d+)\s+TRY/', $aznResponse->body(), $matches);
|
||||
if (isset($matches[1])) {
|
||||
$data['AZN'] = [
|
||||
'Name' => 'AZERBAYCAN YENİ MANATI',
|
||||
'Buying' => NumberFormatter::commaToDot($matches[1]),
|
||||
'Selling' => NumberFormatter::commaToDot($matches[1]),
|
||||
'Change' => "0.00",
|
||||
@@ -78,4 +91,84 @@ class FetchCurrencyRates implements ShouldQueue
|
||||
'Accept-Language' => 'en'
|
||||
])->get($url);
|
||||
}
|
||||
|
||||
private function fetchFromTCMB()
|
||||
{
|
||||
try {
|
||||
$response = $this->fetchData('https://www.tcmb.gov.tr/kurlar/today.xml');
|
||||
|
||||
if (!$response->successful()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$xml = simplexml_load_string($response->body());
|
||||
if (!$xml) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$data = [];
|
||||
|
||||
// Currency mapping - TCMB'deki isimleri kod olarak kullan
|
||||
$currencyMap = [
|
||||
'USD' => 'US DOLLAR',
|
||||
'EUR' => 'EURO',
|
||||
'GBP' => 'POUND STERLING',
|
||||
'CHF' => 'SWISS FRANK',
|
||||
'JPY' => 'JAPENESE YEN',
|
||||
'CAD' => 'CANADIAN DOLLAR',
|
||||
'AUD' => 'AUSTRALIAN DOLLAR',
|
||||
'SEK' => 'SWEDISH KRONA',
|
||||
'NOK' => 'NORWEGIAN KRONE',
|
||||
'DKK' => 'DANISH KRONE',
|
||||
'RUB' => 'RUSSIAN ROUBLE',
|
||||
'CNY' => 'CHINESE RENMINBI',
|
||||
'SAR' => 'SAUDI RIYAL',
|
||||
'KWD' => 'KUWAITI DINAR',
|
||||
'QAR' => 'QATARI RIAL',
|
||||
'AED' => 'UNITED ARAB EMIRATES DIRHAM',
|
||||
'PKR' => 'PAKISTANI RUPEE',
|
||||
'KRW' => 'SOUTH KOREAN WON',
|
||||
'AZN' => 'AZERBAIJANI NEW MANAT',
|
||||
'BGN' => 'BULGARIAN LEV',
|
||||
'RON' => 'NEW LEU'
|
||||
];
|
||||
|
||||
foreach ($xml->Currency as $currency) {
|
||||
$code = (string)$currency['CurrencyCode'];
|
||||
$unit = (float)$currency->Unit;
|
||||
$name = (string)$currency->CurrencyName;
|
||||
$buying = (float)$currency->BanknoteBuying;
|
||||
$selling = (float)$currency->BanknoteSelling;
|
||||
$forexBuying = (float)$currency->ForexBuying;
|
||||
$forexSelling = (float)$currency->ForexSelling;
|
||||
|
||||
// Birim düzeltmesi (100 yen = 1 birim gibi)
|
||||
if ($unit > 1) {
|
||||
$buying = $buying / $unit;
|
||||
$selling = $selling / $unit;
|
||||
$forexBuying = $forexBuying / $unit;
|
||||
$forexSelling = $forexSelling / $unit;
|
||||
}
|
||||
|
||||
// Forex kurları varsa onları kullan, yoksa banknot kurlarını kullan
|
||||
$finalBuying = $forexBuying > 0 ? $forexBuying : $buying;
|
||||
$finalSelling = $forexSelling > 0 ? $forexSelling : $selling;
|
||||
|
||||
if ($finalBuying > 0 && $finalSelling > 0) {
|
||||
$data[$code] = [
|
||||
'Name' => $name,
|
||||
'Buying' => round($finalBuying, 4),
|
||||
'Selling' => round($finalSelling, 4),
|
||||
'Change' => 0.00,
|
||||
'Type' => 'Currency'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"USD":{"Name":"US DOLLAR","Buying":39.6792,"Selling":39.7506,"Change":0,"Type":"Currency"},"AUD":{"Name":"AUSTRALIAN DOLLAR","Buying":25.967,"Selling":26.1363,"Change":0,"Type":"Currency"},"DKK":{"Name":"DANISH KRONE","Buying":6.2523,"Selling":6.2831,"Change":0,"Type":"Currency"},"EUR":{"Name":"EURO","Buying":46.7222,"Selling":46.8064,"Change":0,"Type":"Currency"},"GBP":{"Name":"POUND STERLING","Buying":54.1032,"Selling":54.3853,"Change":0,"Type":"Currency"},"CHF":{"Name":"SWISS FRANK","Buying":49.8917,"Selling":50.212,"Change":0,"Type":"Currency"},"SEK":{"Name":"SWEDISH KRONA","Buying":4.1341,"Selling":4.1769,"Change":0,"Type":"Currency"},"CAD":{"Name":"CANADIAN DOLLAR","Buying":29.1614,"Selling":29.293,"Change":0,"Type":"Currency"},"KWD":{"Name":"KUWAITI DINAR","Buying":129.2622,"Selling":130.9536,"Change":0,"Type":"Currency"},"NOK":{"Name":"NORWEGIAN KRONE","Buying":3.9292,"Selling":3.9556,"Change":0,"Type":"Currency"},"SAR":{"Name":"SAUDI RIYAL","Buying":10.5802,"Selling":10.5992,"Change":0,"Type":"Currency"},"JPY":{"Name":"JAPENESE YEN","Buying":0.2742,"Selling":0.276,"Change":0,"Type":"Currency"},"BGN":{"Name":"BULGARIAN LEV","Buying":23.7551,"Selling":24.0659,"Change":0,"Type":"Currency"},"RON":{"Name":"NEW LEU","Buying":9.183,"Selling":9.3032,"Change":0,"Type":"Currency"},"RUB":{"Name":"RUSSIAN ROUBLE","Buying":0.5007,"Selling":0.5073,"Change":0,"Type":"Currency"},"CNY":{"Name":"CHINESE RENMINBI","Buying":5.5081,"Selling":5.5802,"Change":0,"Type":"Currency"},"PKR":{"Name":"PAKISTANI RUPEE","Buying":0.139,"Selling":0.1408,"Change":0,"Type":"Currency"},"QAR":{"Name":"QATARI RIAL","Buying":10.8255,"Selling":10.9671,"Change":0,"Type":"Currency"},"KRW":{"Name":"SOUTH KOREAN WON","Buying":0.0289,"Selling":0.0293,"Change":0,"Type":"Currency"},"AZN":{"Name":"AZERBAIJANI NEW MANAT","Buying":23.2099,"Selling":23.5136,"Change":0,"Type":"Currency"},"AED":{"Name":"UNITED ARAB EMIRATES DIRHAM","Buying":10.7422,"Selling":10.8828,"Change":0,"Type":"Currency"}}
|
||||
Reference in New Issue
Block a user