C# ile T.C.M.B Döviz Kurlarının Elde Edilmesi

Merhaba; Bu yazımda size internetteki bir Xml dokümanını bir DataTable’ a nasıl yükleyeceğinizi ve yüklediğiniz bu datayı DataGrid te nasıl görüntüleyebileceğinizi açıklamaya çalışacağım.

Sonunda T.C.M.B kur bilgilerini bir xml dokümanda yayımlamaya başladı. Daha önce bu konu ile uğraşanlar bilir; kur bilgileri today.html diye bir html dokümandan ilkel bir metot ile alınıyordu tabi sizin işiniz de web masterın insafına bağlıydı. Neyse ki o günler geride kaldı. Artık today.xml var. Henüz deneme aşamasında ve -bence- bazı mantık hataları olmasına karşın xml standardına geçilmiş olması gayet güzel olmuş. Sayfanın adresi: http://www.tcmb.gov.tr/kurlar/today.xml Önerim bu dokümanı önce iyice incelemeniz yönündedir.

Hemen uygulamaya geçelim.

Yeni bir windows uygulaması açın ve formunuza bir datagrid ekleyin. Kodunuza da System.Xml namespace ini eklemeyi unutmayın.

private void Form1_Load(object sender, System.EventArgs e)
{
dataGrid1.DataSource=source();
}
public DataTable source ()
{
DataTable dt = new DataTable();
// DataTable nesnemizi yaratıyoruz
DataRow dr;
// DataTable ın satırlarını tanımlıyoruz.
dt.Columns.Add(new DataColumn(“Adı”, typeof(string)));
dt.Columns.Add(new DataColumn(“Kod”, typeof(string)));
dt.Columns.Add(new DataColumn(“Döviz alış”, typeof(string)));
dt.Columns.Add(new DataColumn(“Döviz satış”, typeof(string)));
dt.Columns.Add(new DataColumn(“Efektif alış”, typeof(string)));
dt.Columns.Add(new DataColumn(“Efektif Satış”, typeof(string)));
// DataTableımıza 6 sütün ekliyoruz ve değişken tiplerini tanımlıyoruz.
XmlTextReader rdr = new XmlTextReader(“http://www.tcmb.gov.tr/kurlar/today.xml“);
// XmlTextReader nesnesini yaratıyoruz ve parametre olarak xml dokümanın urlsini veriyoruz
// XmlTextReader urlsi belirtilen xml dokümanlarına hızlı ve forward-only giriş imkanı sağlar.
XmlDocument myxml = new XmlDocument();
// XmlDocument nesnesini yaratıyoruz.
myxml.Load(rdr);
// Load metodu ile xml yüklüyoruz
XmlNode tarih = myxml.SelectSingleNode(“/Tarih_Date/@Tarih“);
XmlNodeList mylist = myxml.SelectNodes(“/Tarih_Date/Currency”);
XmlNodeList adi = myxml.SelectNodes(“/Tarih_Date/Currency/Isim”);
XmlNodeList kod = myxml.SelectNodes(“/Tarih_Date/Currency/@Kod“);
XmlNodeList doviz_alis = myxml.SelectNodes(“/Tarih_Date/Currency/ForexBuying”);
XmlNodeList doviz_satis = myxml.SelectNodes(“/Tarih_Date/Currency/ForexSelling”);
XmlNodeList efektif_alis = myxml.SelectNodes(“/Tarih_Date/Currency/BanknoteBuying”);
XmlNodeList efektif_satis = myxml.SelectNodes(“/Tarih_Date/Currency/BanknoteSelling”);
// XmlNodeList cinsinden her bir nodu, SelectSingleNode metoduna nodların xpathini parametre olarak
// göndererek tanımlıyoruz.
dataGrid1.CaptionText=tarih.InnerText.ToString()+” tarihli merkez bankası kur bilgileri”;
// datagridimin captionu ayarlıyoruz.
int x = 19;
/*  Burada xmlde bahsettiğim – bence-  mantık hatasından dolayı x gibi bir değişken tanımladım.
bu x =19  DataTable a sadece 19 satır eklenmesini sağlıyor. çünkü xml dökümanında 19. node dan sonra
güncel kur bilgileri değil Euro dönüşüm kurları var ve bu node dan sonra yapı ilk 18 node ile tutmuyor
Bence ayrı bir xml dökümanda tutulması gerekirdi.
*/
for (int i = 0 ; i < x; i++)
{
dr = dt.NewRow();
dr[0] = adi.Item(i).InnerText.ToString(); // i. adi nodunun içeriği
// Adı isimli DataColumn un satırlarını  /Tarih_Date/Currency/Isim node ları ile dolduruyoruz.
dr[1] = kod.Item(i).InnerText.ToString();
// Kod satırları
dr[2] = doviz_alis.Item(i).InnerText.ToString();
// Döviz Alış
dr[3] = doviz_satis.Item(i).InnerText.ToString();
// Döviz  Satış
dr[4] = efektif_alis.Item(i).InnerText.ToString();
// Efektif Alış
dr[5] = efektif_satis.Item(i).InnerText.ToString();
// Efektif Satış.
dt.Rows.Add(dr);
}
// DataTable ımızın satırlarını 18 satır olacak şekilde dolduruyoruz
// gerçi yine web mastırın insafı devreye giriyor:).
// yukarıda bahsettiğim sorun.
return dt;
// DataTable ı döndürüyoruz.
}

işte döviz kurları en güncel hali ile uygulamamızın içinde!

Ben ayrıca xml query e örnek olabilecek bir çapraz kur değişim programı yazdım. En kısa sürede düzenleyip göndermeyi planlıyorum.

Not:

XmlTextReader rdr = new XmlTextReader(” http://www.tcmb.gov.tr/kurlar/today.xml“);
DataSet ds = new DataSet();
ds.ReadXml(rdr);
dataGrid1.DataSource=ds;

bu kod da belirtilen url deki bir xml dokümanını direkt olarak dataset e aktarır. Yani bu 4 satırlık kod yukarıdaki kod ile aynı işi yapıyor:)