Elektronik ticaret ve muhasebe uygulamaları ile birlikte sıkça ihtiyacımız olan verilerden birisi de farklı kurlar üzerinden işlem yapmak. Bunun için bir konsol hazırlayıp manuel olarak her gün kurları sistemimize girebileceğimiz gibi, bunları bir servis vasıtası ile günlük otomatik olarak da alabiliriz. Bu sayede günlük bizim bir iki saatlik zaman kaybımızı ortadan kaldırmış oluruz.
Merkez Bankası sisteminden yazacağımız bir servis vasıtası ile bu verileri alıp bir veri tabanında tutacağız ve ihtiyacımız olan zamanlarda buradan kullanacağız. Ücretsiz olarak günlük kurları http://www.tcmb.gov.tr/kurlar/today.xml linkinden alabiliriz.
Öncelikle kur verilerini tutacağımız kur isimli bir tablo oluşturuyoruz. Günlük olarak aldığımız kur bilgileri bu tabloda yer alacak ve geçmişe yönelik de bu verilere ulaşabileceğiz.
Tablomuz hazır, şimdi de bu tablonun doldurulması işlemlerine geçebiliriz. Merkez Bankasının XML ile sağladığı kur bilgileri verisini alıp, PHP’nin SimpleXML’ini kullanarak parçalıyoruz ve yukarıda oluşturduğumuz tabloya bu verileri yazıyoruz.
$xmlUrl = "http://www.tcmb.gov.tr/kurlar/today.xml";
$getXml = file_get_contents($xmlUrl);
$xml = new SimpleXMLElement
($getXml);
for($i=0;$i<count($xml->Currency);$i++){
$kur_kodu = (string
)$xml->Currency[$i]["Kod"];
$output[$kur_kodu]["adi"] = (string
)$xml->Currency[$i]->Isim;
$output[$kur_kodu]["birim"] = (double
)$xml->Currency[$i]->Unit;
$output[$kur_kodu]["alis"] = (double
)$xml->Currency[$i]->ForexBuying;
$output[$kur_kodu]["satis"] = (double
)$xml->Currency[$i]->ForexSelling;
if($output[$kur_kodu]["alis"]>0 AND
$output[$kur_kodu]["satis"]>0){
mysql_query(" INSERT INTO kur SET kod = '".$kur_kodu."', adi = '".$output[$kur_kodu]["adi"]."', birim = '".$output[$kur_kodu]["birim"]."', alis = '".$output[$kur_kodu]["alis"]."', satis = '".$output[$kur_kodu]["satis"]."', tarih = '".date("Y-m-d")."', saat = '".date("H:i:s")."' ");
}
}
Yazmış olduğumuz kodlarımızı biraz daha geliştirelim. Yazmış olduğumuz bu kodlar sayesinde ilk önce veri tabanından kontrol edelim, eğer o güne ait veriler veri tabanında varsa alıp kullanalım. Eğer veri tabanına o güne ait bir kur bilgisi yoksa önce Merkez Bankası servisinden kur bilgilerini alsın ve veri tabanına eklesin, sonra da bize bir bilgileri kullanmak için sunsun.
header("Content-Type: text/html; charset=UTF-8");
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "root";
$dbName = "test_db";
$dbLink = mysql_connect($dbHost, $dbUser, $dbPass);
$dbSelectDb = mysql_select_db($dbName, $dbLink);
mysql_query("SET NAMES 'utf8'");
$dbResult = mysql_query("SELECT * FROM kur WHERE tarih = '".date("Y-m-d")."' ");
if(mysql_num_rows($dbResult)>0){
while($dbData = mysql_fetch_assoc($dbResult)){
$output[$dbData["kod"]]["adi"] = $dbData["adi"];
$output[$dbData["kod"]]["birim"] = $dbData["birim"];
$output[$dbData["kod"]]["alis"] = $dbData["alis"];
$output[$dbData["kod"]]["satis"] = $dbData["satis"];
}
}
else{
$xmlUrl = "http://www.tcmb.gov.tr/kurlar/today.xml";
$getXml = file_get_contents($xmlUrl);
$xml = new SimpleXMLElement
($getXml);
for($i=0;$i<count($xml->Currency);$i++){
$kur_kodu = (string
)$xml->Currency[$i]["Kod"];
$output[$kur_kodu]["adi"] = (string
)$xml->Currency[$i]->Isim;
$output[$kur_kodu]["birim"] = (double
)$xml->Currency[$i]->Unit;
$output[$kur_kodu]["alis"] = (double
)$xml->Currency[$i]->ForexBuying;
$output[$kur_kodu]["satis"] = (double
)$xml->Currency[$i]->ForexSelling;
if($output[$kur_kodu]["alis"]>0 AND
$output[$kur_kodu]["satis"]>0){
mysql_query(" INSERT INTO kur SET kod = '".$kur_kodu."', adi = '".$output[$kur_kodu]["adi"]."', birim = '".$output[$kur_kodu]["birim"]."', alis = '".$output[$kur_kodu]["alis"]."', satis = '".$output[$kur_kodu]["satis"]."', tarih = '".date("Y-m-d")."', saat = '".date("H:i:s")."' ");
}
}
}
echo "<pre>";
print_r($output);
echo "</pre>";
Şu ana kadar yazmış olduklarımız ile ihtiyacımızı büyük bir ölçüde karşılamış bulunuyoruz. Kendinize göre biraz daha değiştirerek ya da eklemeler yaparak kullanabilirsiniz. Bu kodları bir fonksiyon haline getirerek projelerimizde istediğimiz yerde kullanabiliriz.
Emrah Şahin
Kas 11, 2011Oldukça yararlı ve anlaşılır bir yazı olmuş teşekkürler.
Kredi
Ara 03, 2011Emek verdiğiniz için teşekkürler, çok faydalı paylaşım.