PHP İle Güncel Döviz Kuru Çekme Sınıfı
Bu yazımızda hep birlikte uzak bir sitede bulunan xml dosyasından veri çekelim ve çektiğimiz bu verileri yazdıralım. Ayrıca bunu daha sonra projelerimizde daha rahat kullanmak için sınıf haline getirelim.Yapacağımız işlemin karmaşık olmaması için basit bir site bulmak istedim ve hem işe yarar hem de basit olması açısından güncel dövüz bilgilerini çekmeye karar verdim. Güncel döviz bilgilerini çekmek için Türkiye Cumhuriyeti Merkez Bankası’nın (TCMB) sitesini kullanacağız. Çekeceğimiz veriler xml formatında olduğu için simplexml_load_file fonksiyonu işimizi daha rahat görecektir.
Verileri çekeceğimiz sayfa: http://www.tcmb.gov.tr/kurlar/today.xml
NOT: PHP’de sınıf kullanımı bilindiği varsayılarak anlatılmıştır. Yazının sonunda oluşturmuş olduğumuz sınıfın kullanımı da anlatılarak sınıf kullanımı bilmeyen arkadaşların projelerinde döviz kuru çekme işlemini nasıl kullanacaklarına yardımcı da olunmuştur.
2 adet dosya oluşturalım. Birisi döviz kurlarını kullanacağımız index.php, diğeri de döviz kurlarını çekecek olan DovizKurlari.Class.php dosyamızdır.
index.php sayfamıza aşağıdaki kodu yazıp çalıştırdığımızda xml dosyamızın yapısı karşımıza çıkacak ve verileri nasıl almamız gerektiğini bize gösterecektir.
echo '';
print_r(simplexml_load_file("http://www.tcmb.gov.tr/kurlar/today.xml"));
echo '
';
Sitelerde en çok kullanılan 2 döviz kurunun (Dolar ve Euro) alış ve satış bilgilerini çekeceğiz. Yukarıdaki kodu çalıştırdığımız zaman Currency değerinin bizim için önemli olduğunu görüyoruz. Currency[0] verimiz doların detaylı bilgilerini, Currency[3] verimiz de euronun detaylı bilgilerini vermektedir. Ayrıca Currency verisi içerisindeki BanknoteBuying değeri döviz kurunun alış değerini, BanknoteSelling değeri de döviz kurunun satış değerini vermektedir. Tüm açıklamalarımız hazırsa kodlarımızla işlemimize başlayalım.
DovizKurlari.Class.php dosyamıza class oluşturarak işlemimize başlıyoruz.
class DovizKurlari { }
Class dosyamıza dışarıdan erişime gerek olmadığı için 2 adet private değişken ekliyoruz. Değişkenimizin birisi TCMB döviz kurlarının linkini tutacak diğeri de xml verilerinin çekilmesini sağlayacak bağlantıyı kuracaktır.
class DovizKurlari { private $tcmb = "http://www.tcmb.gov.tr/kurlar/today.xml"; private $conn; }
Private değişkenlerimizi oluşturduktan sonra doların ve euronun alış ve satış bilgilerini tutan değişkenlerimizi oluşturacağız. Bu değişkenleri sınıf dışarısında kullanacağımız için public olarak ayarlamamız gerekmektedir.
class DovizKurlari { private $tcmb = "http://www.tcmb.gov.tr/kurlar/today.xml"; private $conn; public $usd_buy; public $usd_sell; public $eur_buy; public $eur_sell; }
Sınıfımızın başlangıç fonksiyonunu kullanarak TCMB döviz kurlarını bağlantımızı sağlıyoruz.
public function __construct(){ $this->conn = simplexml_load_file($this->tcmb); }
Doların alış ve satış bilgilerini çeken fonksiyonumuzu hazırlıyoruz.
public function USD_Data(){ $this->usd_buy = $this->conn->Currency[0]->BanknoteBuying; $this->usd_sell = $this->conn->Currency[0]->BanknoteSelling; }
Euronun alış ve satış bilgilerini çeken fonksiyonumuzu hazırlıyoruz.
public function EUR_Data(){ $this->eur_buy = $this->conn->Currency[3]->BanknoteBuying; $this->eur_sell = $this->conn->Currency[3]->BanknoteSelling; }
Dolar ve euronun alış ve satış bilgilerine dışarıdan erişebilmemiz için bu iki fonksiyonu çalıştırmamız lazım. Bu fonksiyonu 2 türlü çalıştırabiliriz. Birincisi index.php içerisinde sınıfımızı çağırdığımız zaman bu iki fonksiyonu orada çağırıp çalıştırabiliriz, ikincisi de sınıf içerisindeki başlangıç fonksiyonu içeriside çağırıp işlemimizi gerçekleştirebiliriz. Biz ikinci yöntemi kullanacağız çünkü başlangıç olarak hepsini çekiyoruz ve ayrıca index.php içerisinde sınıfa ait çok fazla kodu veya fonksiyonu kullanmak istemiyorum.
DovizKurlari.Class.php dosyamızın son hali aşağıdaki gibidir.
conn = simplexml_load_file($this->tcmb); $this->USD_Data(); $this->EUR_Data(); } public function USD_Data(){ $this->usd_buy = $this->conn->Currency[0]->BanknoteBuying; $this->usd_sell = $this->conn->Currency[0]->BanknoteSelling; } public function EUR_Data(){ $this->eur_buy = $this->conn->Currency[3]->BanknoteBuying; $this->eur_sell = $this->conn->Currency[3]->BanknoteSelling; } } ?>
Class dosyamızla işimiz bittiğine göre gelelim index.php dosyamızdaki işlemlerimize. index.php dosyamızda ilk olarak sınıfımızın tanımlamasını yapacağız. Sınıf dosyasını sayfaya dahil edip çağırma işlemimizi gerçekleştirelim.
require_once("DovizKurlari.Class.php"); $DovizKurlari = new DovizKurlari();
Bu işlemimiz de bittikten sonra artık index.php dosyamız içerisinde küçük bir css tanımlaması yaparak oluşturduğumuz sınıfın verilerini kullanalım. index.php ve DovizKurlari.Class.php dosyamızın linklerini github hesabımda paylaşıyorum.
Yararlı olması dileğiyle. İyi Çalışmalar
Hocam şöyle bir hata alıyorum sorun nedir ?
Warning: simplexml_load_file(http://www.tcmb.gov.tr/kurlar/today.xml) [function.simplexml-load-file]: failed to open stream: Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP? in
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity “http://www.tcmb.gov.tr/kurlar/today.xml”
USD:
EURO:
Gram Altın çekebilir miyiz.
Elini
Evet bu sınıfın bir benzerini yazarak altın fiyatlarının yayınlandığı xml üzerinden çekebiliriz.
hocam bu script in son noktada ekrana yazması yerine json a çevirmesi yani json döndürmesi için ne yapmak lazım acaba? PHP hiç bilmiyorum ama bu script işimi görecek json döndürürse.
Teşekkürler.
Verileri xml olarak alabiliyoruz json yerine xml işini görüyor mu? Eğer xml görmüyorsa json’a çevirme işlemini yapayım.
Merhabalar. Bu sistemle hazırladığım scriptte ürün fiyatlarını dolar olarak girip günün döviz kuruna göre de ürün fiyatlarını belirlemeye niyetlendim. fakat eklediğim kodlar ilk aldığı dolar kurunu sabit tutuyor. yani şuan bu mantıkla aldığım dolar fiyatı 7.720 de kaldı. tcmb sitesiyle kıyaslıyorum yanlış. bunun canlı bir şekilde çekilmesi için başka birşey mi yapmam gerekiyor.
Dolar kurunu bir yere kaydedip fiyatı bunun üzerinden mi değerlendiriyorsunuz.