v2.5.2
Giriş yap

Tcmb doviz kuru çekerken istek zaman aşımına uğruyor?

aydinkeskin
669 defa görüntülendi

kurları çekerken
web sitesi request time out a düşüyor

bu durumu nasıl aşabilirim.
yaptığım fonksiyon aşağıdaki gibi.

<?php
function curlAl($url){ 
	$ch = curl_init(); 
	curl_setopt($ch, CURLOPT_URL, $url); 
	curl_setopt($ch, CURLOPT_HEADER, 0); 
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
	curl_setopt($ch, CURLOPT_REFERER,'http://www.google.com.tr'); 
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1'); 
	$exec = curl_exec($ch); 
	curl_close($ch); 
	return $exec; 
}
 
function dovizKurlariGelsin() { 
	$sonuc = array(); 
	$bir = curlAl('https://www.tcmb.gov.tr/kurlar/today.xml'); 
	$xml = simplexml_load_string($bir);
	foreach($xml as $i => $k) {
 
		$kurKodua = $k->attributes();
		$kurKodu = $k->Currency;
		if($kurKodu != 'XDR') {
            $sonuc[] = array(
				'kur' => (string)$kurKodua->Kod, 
				'adi' => (string)$k->Isim, 
				'alis' => (string)$k->ForexBuying, 
				'satis' => (string)$k->ForexSelling,
				);
		}
	}
	return $sonuc;
}

function KurCek( int $key,  string $tur, string $alis){
	$kurlar = dovizKurlariGelsin();
	$birim = [
		'USD' => 'ABD DOLARI',
		'AUD' => 'AVUSTRALYA DOLARI',
		'DKK' => 'DANİMARKA KRONU',
		'EUR' => 'EURO',
		'GBP' => 'İNGİLİZ STERLİNİ',
		'CHF' => 'İSVİÇRE FRANGI',
		'SEK' => 'İSVEÇ KRONU',
		'CAD' => 'KANADA DOLARI',
		'KWD' => 'KUVEYT DİNARI',
		'NOK' => 'NORVEÇ KRONU',
		'SAR' => 'SUUDİ ARABİSTAN RİYALİ',
		'JPY' => 'JAPON YENİ',
		'BGN' => 'BULGAR LEVASI',
		'RON' => 'RUMEN LEYİ',
		'RUB' => 'RUS RUBLESİ',
		'IRR' => 'İRAN RİYALİ',
		'CNY' => 'ÇİN YUANI',
		'PKR' => 'PAKİSTAN RUPİSİ',
	];
	
	if($kurlar[$key]["adi"] == $birim[$tur])	return $kurlar[$key][$alis];
}

	$dolar		= KurCek("0","USD","satis");
	$euro		= KurCek("3","EUR","satis");

?>

normalde sorunsuz çekiyor ama bazen bir takıldımı takılıyor.

bunun önüne nasıl geçebilirim acaba.

aydinkeskin
1394 gün önce

benim sorunum cevabı verdiğin cevap uygun değil fakat
başka yerlerden de çekmek hatta boş değer halinde bir başka yerden çekmek
daha iyi olur

bende 4 farklı firmadan çekmeye karar verdim

boş geldikçe alta atlıyor

üstüne bide kişiye özel panel tarafına manuel güncelleme ekledim artık isteyen istediği gibi yapar :)

hatta belki birilerinin işine yarar diye sadece senin verdiğin linkten nasıl çekeceklerinin fonksiyonunu paylaşayım.
kendimce basit bir şekilde bu şekilde yaptım ekstra bişiler yapmak isteyenlerde
yapabilirler.


function CanliDoviz($deger){
	$jsonVeri = file_get_contents("https://canlidoviz.com/doviz-kurlari.jsonld",true);
	$veri = json_decode($jsonVeri,1);
	$response = $veri["mainEntity"]["itemListElement"];
	$birim = $response[$deger]["currency"];
	$result = $response[$deger]["currentExchangeRate"]["price"];
	return  $result;
} 
// kullanırken 
echo CanliDoviz(0); //->Dolar
echo CanliDoviz(1); //->Euro