diff --git a/app/Jobs/FetchCurrencyRates.php b/app/Jobs/FetchCurrencyRates.php index e63fb44..25207fb 100644 --- a/app/Jobs/FetchCurrencyRates.php +++ b/app/Jobs/FetchCurrencyRates.php @@ -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 []; + } + } } diff --git a/currency_test.json b/currency_test.json new file mode 100644 index 0000000..de627a4 --- /dev/null +++ b/currency_test.json @@ -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"}} \ No newline at end of file