Tcmb doviz kuru çekerken istek zaman aşımına uğruyor?
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.
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