Döviz Kurlarının MB’den alınması

Muhasebe, ERP, portal gibi uygulamalarda vazgeçilmez içeriklerinden biri de Merkez Bankası(MB) günlük döviz kurları konusunda kullanıcının bilgilendirilmesidir. Bu küçük ihtiyacı karşılamak için MB, kendi sitesinde günlük kurları, XML formatında sunuyor. Bizim yapacağımız işlem, bu xml dosyasını okuyup ilgili parse işlemlerini yapmaktır. Bunun için .NET Framework’ün, System.Net kütüphanesi kullanılır. Bu kütüphane, Internet uygulamalarını daha kısa sürede ve kolayca geliştirmek için gerekli sınıfları içermektedir. Bu bölümde HttpWebRequest ve HttpWebResponse sınıflarını kullanacağız.
Bu sınıflar, HTTP protokolünü kullanarak uzaktaki sitelere istek göndermemizi ve onlardan gelen karşılığı yönetmemizi sağlar. Günlük döviz kurları, MB’nın https://www.tcmb.gov.tr/kurlar/today.xmladresinde listelenmektedir. Bu liste her an değişmediği için uygulamalarımızda bu listeyi günlük bir kere okuyup local bir veritabanında saklamanın daha mantıklı olacağını düşünüyorum. Bu amaçla veritabanı üzerinde bir tablo oluşturdum.

CREATE TABLE DovizKur (
	[DovizKurId] [int] IDENTITY (1, 1) NOT NULL ,
	[DovizKurTypeId] [int] NULL ,
	[DovizKurValue] [smallmoney] NULL ,
	[DovizKurRecordDate] [smalldatetime] NULL
) ON [PRIMARY]

Her gün sabah saatlerinde çalışacak bir program MB’ye bağlanıp XML dosyasını okuyacak ve almak istediğimiz döviz kodlarını tabloya yazdıracak. Biz de uygulamamızda bu tablodan besleneceğiz. Aşağıdaki metod, döviz kurları aldıktan sonra sadece USD ve EUR kurlarını almak üzere verileri filtreleyip veritabanına gönderilecek SQL cümlesini oluşturur.

static void Main(string[] args)
{
	HttpWebRequest objRq = (HttpWebRequest)HttpWebRequest.Create("https://www.tcmb.gov.tr/kurlar/today.xml");

	HttpWebResponse objRsp = (HttpWebResponse)objRq.GetResponse();
	System.IO.Stream objStrm = objRsp.GetResponseStream();
	XmlTextReader rdr = new XmlTextReader(objStrm);

	DataSet ds = new DataSet();
	ds.ReadXml(rdr);

	DataView dv = ds.Tables[1].DefaultView;

	string UpdateSql = "IF (SELECT COUNT(DovizKurId) FROM DovizKur WHERE CONVERT(char(10),DovizKurRecordDate,104) = CONVERT(char(10),GETDATE(),104))=0 INSERT DovizKur ";
	dv.RowFilter = "KOD='USD'";
	UpdateSql += " SELECT 2," + dv[0]["BanknoteSelling"].ToString() + ",GETDATE() ";
	dv.RowFilter = "KOD='EUR'";
	UpdateSql += " UNION ALL SELECT 3," + dv[0]["BanknoteSelling"].ToString() + ",GETDATE() ";
	VeritabaninaKaydet(UpdateSql);
}

Döviz Kurlarının MB’den alınması” hakkında 10 yorum

  1. Ahmet Kaymaz Yazar

    Merhaba,doğrudan bu şekilde bir proje bulunmamaktadır. Bu çok küçük modülün tüm kodları zaten sayfada verilmiştir. Buna ek birşey yapmanıza gerek yok diye düşünüyorum.

    Cevapla
  2. gariban

    Merhabalar
    çalışmanız güzel olmuş
    fakat acemi insanlar için daha güzel anlatılabilirdi.
    herkes sizin kadar profesyonel değil. hiç bilmiyoruz.
    sayfaya girip bişeykere bakalım dedik. moralimiz bozuldu.
    diğer arkadaşımızın dediği gibi bir proje olsaydı
    neyi nereye ne şekilde yazmış olduğunuzu görürdük.
    neyse kapatayım sayfayıda başka işlere bakayım..

    Cevapla
  3. Ahmet Kaymaz Yazar

    Merhaba,eleştirilerinizi için teşekkür ederim. Ben bu konunun yeterince açık ve anlaşılır olduğunu düşünüyorum. Yine de keşke anlaşılmayan bölümleri, aklınıza takılanları yazmış olsaydınız. Böylece hem bir nebze de olsa moralinizin bozulmasını engellemiş olur hem de birbirimize yardımcı olmuş olurduk.

    Cevapla
  4. Mesut

    kodlar gayet temiz; cok tesekkur ederim.. form\’a yuklememiz gereken sadece datagridview mudur? bir de dolar ve euro\’ya ek olarak sterling\’i de cagirmak istersek ne yapmaliyiz?

    Cevapla
  5. Ahmet Kaymaz Yazar

    Mesut,
    Konunun DataGridView ile ilgisi bulunmamaktadır. Eğer Merkez Bankası’nın sitesinden çekilen verileri göstermek istersen o zaman DataGrid, DataList, DataRepeater gibi bir kontrol kullanabilirsin. Yazıdaki kodlar sözkonusu XML dosyasını bir DataSet nesnesine aktarmakta. O DataSet içerisinde aşağıdaki satırı kullanarak arama yaptırabilirsin. Örneğin dv.RowFilter = “KOD=’USD'”; kodu doğrudan USD satırını döndürür, dv.RowFilter = “KOD=’GBP'”; filtresini verirsen Sterlin satırı dönmüş olur.

    Cevapla
  6. gokhan

    guzel hosta hocam bişeyi anlamadım hergün sabah saatlerinde girip bir kere çalıştırmamız yeter demişsiniz bu kodda zamanla alakalı biryer göremedim aydınlatırmısınız beni ?

    Cevapla
  7. Ahmet Kaymaz Yazar

    Gökhan,kodun içerisinde zamanla ilgili bir alan yok. Burada kastım bu programı her sabah çalıştıracak bir işlem yapmaktır. Bu SQL Job olabilir veya Windows Scheduler olabilir.

    Cevapla
  8. Osman

    Ahmet Bey,
    Webten çektiğimiz verileri hesapla bağlandığımız yani kullanıcı adı şifre ve güvenlik koduyla bağlandığımız bir siteden çekme şansımız var mı ?

    Cevapla
  9. Ahmet Kaymaz Yazar

    Osman Bey,HttpWebRequest ve HttpWebResponse bileşenlerini kullanarak URI adresine talep gönderilebilir ve sunucundan gelen yanıt okunabilir.

    Cevapla

Mesut için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir