mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ile ve Jquery Ajax ile Kur (Döviz) Bilgilerini Alma
Bu yazımda son dönemde ihtiyaç duyduğum ve kullandığım merkez bankasından döviz bilgilerini çekme örneğini sizlerle paylaşacağım. Bu örneği hem klasik asp.net sayfasında kullanarak hem de Jquery Ajax kullanarak hazırladım. İsteyenler iki yöntemden birini seçerek bu uygulamayı kullanabilir. Bu örneği daha önce yazmış olduğum Xml Belgelerden Veri Çekme yazısından faydalanarak hazırladım. Bu örnekte bir önceki yazıma göre birkaç değişik yöntem söz konusu. Bu farklılıkları kodları inceleyerek görebilirsiniz. Şimdi merkez bankasının sağlamış olduğu kur bilgilerini (xml dosyaya buradan ulaşabilirsiniz) hem normal asp.net sayfamızda kullanmaya hem de Jquery Ajax ile kullanmaya bakalım.

Öncelikle verileri çekeceğimiz xml dosyanın yapısını inceleyelim. Çünkü verileri çekerken kullanacağımız değişkenlerde bu yapıya ihtiyacımız var. Verileri alacağımız xml dosyanın yapısı şöyle:

  <?xml version="1.0" encoding="iso-8859-9"?>
  <?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
  <Tarih_Date Tarih="08.05.2009" Date="05/08/2009">
    <Currency Kod="USD" CurrencyCode="USD">
      <Unit>1</Unit>
      <Isim>AMERİKAN DOLARI</Isim>
      <CurrencyName>US DOLLAR</CurrencyName>
      <ForexBuying>1.547</ForexBuying>
      <ForexSelling>1.5545</ForexSelling>
      <BanknoteBuying>1.5459</BanknoteBuying>
      <BanknoteSelling>1.5568</BanknoteSelling>
      <CrossRateUSD>1</CrossRateUSD>
      <CrossRateOther></CrossRateOther>
    </Currency>
  </Tarih_Date>

Bu yapıya uygun olarak klasik asp.net sayfasında yazacağımız kodlar ise şu şekilde olmalı.

  protected void Page_Load(object sender, EventArgs e)
  {
    piyasa(); //bilgileri alan metot
 
    // Değerleri kontrollere yazdırıyoruz.
    d_alis.InnerHtml = dolar_alis.ToString();
    d_satis.InnerHtml = dolar_satis.ToString();
    e_alis.InnerHtml = euro_alis.ToString();
    e_satis.InnerHtml = euro_satis.ToString();
  }
  public double dolar_alis, dolar_satis;
  public double euro_alis, euro_satis;
  public void piyasa()
  {
    XmlTextReader okuyucu = new XmlTextReader("http://www.tcmb.gov.tr/kurlar/today.xml");
    XmlDocument dokuman = new XmlDocument();
    dokuman.Load(okuyucu);
    XmlNode dolar = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='US DOLLAR']");
    XmlNode euro = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='EURO']");
    dolar_alis = double.Parse(dolar.ChildNodes[3].InnerText);
    dolar_satis = double.Parse(dolar.ChildNodes[4].InnerText);
    euro_alis = double.Parse(euro.ChildNodes[3].InnerText);
    euro_satis = double.Parse(euro.ChildNodes[4].InnerText);
  }

Klasik asp.net sayfasında bu şekilde verileri çekip herhangi bir kontrole değerleri bu şekilde yazdırabiliyoruz. Bu uygulamayı örneklendirmek için bir de Jquery Ajax ile hazırladım. Bunun için yazmış olduğum server taraflı Webmethod ve class ise aşağıdaki gibi olacak.

  public class kurlar
  {
    public double dolar_alis;
    public double dolar_satis;
    public double euro_alis;
    public double euro_satis;
  }
 
  [System.Web.Services.WebMethod]
  public static kurlar kurlari_al()
  {
    kurlar k = new kurlar();
    XmlTextReader okuyucu = new XmlTextReader("http://www.tcmb.gov.tr/kurlar/today.xml");
    XmlDocument dokuman = new XmlDocument();
    dokuman.Load(okuyucu);
    XmlNode dolar = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='US DOLLAR']");
    XmlNode euro = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='EURO']");
    k.dolar_alis = double.Parse(dolar.ChildNodes[3].InnerText);
    k.dolar_satis = double.Parse(dolar.ChildNodes[4].InnerText);
    k.euro_alis = double.Parse(euro.ChildNodes[3].InnerText);
    k.euro_satis = double.Parse(euro.ChildNodes[4].InnerText);
    return k;
  }

Bu şekilde yazdığımız kodlardan sonra sayfamızın html bölümünde yazmış olduğumuz Webmethod'a Ajax isteği ile erişip verileri alacağız. Bunun için yazacağımız script kodlar ise şöyle olmalı.

<script type="text/javascript">
  $(function(){
      kurlar();
      $("#yenile").click(function(){
          kurlar();
      });
  });
  function kurlar()
  {
    $.ajax({
        type: "POST",
        url: "ajax_kur.aspx/kurlari_al",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg){
            $("#d_alis").html(msg.d.dolar_alis);
            $("#d_satis").html(msg.d.dolar_satis);
            $("#e_alis").html(msg.d.euro_alis);
            $("#e_satis").html(msg.d.euro_satis);
        }
    });
  }
</script>

Görüldüğü gibi merkez bankasından döviz (kur) bilgilerini bu şekilde iki yöntemle alabiliriz. Hazırlamış olduğum örneklerden klasik asp.net sayfası örneğini buradan, Jquery Ajax ile yapmış olduğum örneği ise buradan görebilirsiniz. Buradan da iki örneğin dosyalarını indirebilirsiniz. Hazırladığım örneklerde sadece Euro ve Dolar bilgilerini çekmekteyim. İsteyenler bu bilgilere ek olarak diğer verileri de çekebilirler.

Daha önceki yazım ile bu yazıdaki fark ise xml nodelar'ı ve özelliklerini seçerken yaptığımız farklılık. İlk yazımda belli bir node'u seçip o node'un altındaki tüm özellikleri alırken bu örnekte sadece belirlediğimiz değere sahip olan node'u seçip onun altından istediğimiz node'ların değerlerini alıyoruz. Bu örnekte kullanmış olduğumuz yöntem daha doğru bir yöntem. Eğer verilerin sıralamasında bir değişim olursa yazdığımız kodlarda değişim yapmaya gerek yok. Ancak bir önceki yazımdaki gibi yapmış olsaydık node'ların sırasını göz önüne almalıydık.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar jQuery Ajax ile UserControl'leri Etkin Kullanma Css and Html Web Disayn LINQPad Linq for Visual C# 2008 (E-Book) Asp.net ve Jquery Ajax ile Dizindeki Dosya ve Klasörleri Listeleme
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Serdar 18 Temmuz Cumartesi 2009 13:53 #1
Güzel bir anlatım olmuş, eline sağlık. Peki xml de birden fazla döviz kuru var atıyorum sterlin, frank, yen gibi bilgileri ya da o xml`deki tüm verileri çekmek isteseydik nasıl bir yol izlememiz gerekirdi?
Mehmet Duran 18 Temmuz Cumartesi 2009 20:35 #2
Merhaba. Burada sadece belirli değerleri çekiyorum. Eğer farklı değerleri almak istiyorsan onlara göre de node seçme ve değerleri alma işlemini gerçekleştirmelisin. Eğer belgedeki tüm verileri okumak istiyorsan verinin node yapısını bilmen ve node sayısna göre döngüye girip döngü içinde değerleri okuman lazım. Node`a göre verileri alıp bir değişkene attığında node sayısını elde edebileceğini düşünüyorum. Buna göre de döngü içinde verileri alabilirsin.
Serdar 19 Temmuz Pazar 2009 02:44 #3
Evet, dediğiniz gibi uyguladığımda sonuç aldım. Şu an tüm veriler çekilebiliyor. Peki yenile butonu yerine her 5 dakikada bir otomatik yenileme yapmasını sağlayabilir miyiz? ( yine jQuery ile )
Mehmet Duran 19 Temmuz Pazar 2009 12:05 #4
Bu konuda daha önce bir örnek hazırlamıştım. Ziyaretçilerin gezdikleri sayfaları alıp yazdırıyorum ve her 5 saniyede bunu yeniliyordum. Canlı maç anlatım olayı birçok yerde bu şekilde yapılıyor. İlgilli örneğe ve yazıma buradan ulaşabilirsin.
Serdar 21 Temmuz Salı 2009 12:11 #5
Peki hocam son olarak, Örneğin saat 15.00 da kurlar değişti ve xml de değişti. Önceki kura göre artmış eksilmiş gibi + , - koymak istiyorum mesela, önceki değerleri session`a mı atmak lazım?
Mehmet Duran 21 Temmuz Salı 2009 21:27 #6
Söylediğin olayı server taraflı yapmak pek mantıklı olmaz. Server tarafında yapabilmek için tüm değerler için ayrı ayrı static değişken tanımlayıp o değişkenlerde değerleri tutmalısın ve her gelen istekte verileri okyuyup bu static değişkenlerle karşılaştırman gerekir. Bana göre mantıklı olan bu olayı Ajax ile yapmak. Kullanıcı sayfaya girdikten sonra belirli aralıklarla Ajax isteği yapıp, Ajax isteği sonucunda alınan değerleri global tanımlanan script değişkene atmak ve Ajax sonucu gelen değer ile değişkendeki değerleri karşılaştırmak gerekir. Yani server ve kullanıcı tarafından aynı işlemi yapacaksın ama mantıklı olan Ajax kullanarak Script ile yapmak.
Serdar 26 Temmuz Pazar 2009 19:03 #7
Hmm benim için biraz karışık oldu bu :) Teşekkür ederim bilgilendirme için...
Barış GÜNAÇAR 21 Ağustos Cuma 2009 10:07 #8
merhaba, kurlar.aspx dosyasını kendi bilgisayarımda çalıştırdım.Çalışıyor fakat senin örnekte şu şekilde yazıyor : Dolar 1,4845 fakat ben çalıştırdıgımda Dolar 14845 şekilde düz olarak yazıyor yani virgülü çıkmıyor ?, ilk sayıdan sonra virgülü nasıl cıkartabilirim ve 1.484 yapmak istiyorum ben yani virgülden sonra 3 sayı onu nasıl yapabilirim?, yardımcı olursan sevinirim.iyi çalışmalar
Mehmet Duran 21 Ağustos Cuma 2009 13:58 #9
Merhaba. Kodlarda eklemeyi unutmuş olabilirim. Gelen veriyi nokta veya virgül ile doğru bir biçimde göstermek için double.Parse metodunu kullandığımız yerde ikinci bir parametre ile kültür belirtmemiz gerekiyor. (İngilizce, Türkçe, vs.) Virgül veya noktadan sonra digit sayısı için de double değeri ToString ile yazdırırken ToString metoduna parametre vermeliyiz. (double_degisken.ToString("F3"); gibi)
HasanG 26 Ağustos Çarşamba 2009 21:19 #10
Linklerin rengi masus mu metinlerle çok yakın renkte, tüm yazıyı okumak lazım 'buradan' linklerini bulabilmek için :)? SIEMENS'deki yetkililere bu xml dosyasını göstermeliyim, zavallılar koca html sayfasını parse ediyo iki kuru SAP veritabanıda güncellemek için.
Mehmet Duran 26 Ağustos Çarşamba 2009 21:31 #11
Linklerin rengi iyi ama bold yapmak mantıklı olacak. Aslında yönetim panelinde bir bölüm var değiştirmek için ama dosyalara yazma izni vermek gerekiyor. Şu anda dosyalara yazma izni yok. Pleskten de veremiyorum çalışmıyor. Maalesef el ile yapıp değiştireceğim. Fırsat bulunca düzeltmeye çalışırım. ;)
CENK 20 Eylül Pazar 2009 22:01 #12
Selam Mehmet kardesim,ben hala yapamadım bu virgül olayını,herhangi bir örnek ile açıklayabilirmisin
CENK 20 Eylül Pazar 2009 22:15 #13
Olayı çözdüm,bir an için dalmışım
Mehmet Duran 22 Eylül Salı 2009 13:12 #14
Sorunu çözdüğüne sevindim. İyi çalışmalar.
Bahattin 25 Ocak Pazartesi 2010 15:12 #15
Mehmet abicim şu virgül oalyını bi daha anlatsan iği olur abi bende anlayamadım (double_degisken.ToString("F3"); gibi) kodu neye yazmamız gerekiyor ??
Mehmet Duran 25 Ocak Pazartesi 2010 22:26 #16
Örnekte değerleri double değişken ile tutuyoruz. Eğer bu değerleri bir yerde yazdıracaksak ToString metodu ile yazırmamız gerekir. Bu sırada ToString metodunun aldığı parametre sayesinde double'da virgülden sonra alınacak rakam sayısını belirleyebiliyoruz.
Mert 12 Şubat Cuma 2010 16:02 #17
Teşekkürler.Parse etme işlemi ekstra olmuş.Veriler zaten formatlı halde geliyor.
Mehmet Duran 12 Şubat Cuma 2010 16:04 #18
Parse işlemi string olarak alınan değerlerin double türündeki değişkenlere atanırken yapılmakta. Yani gereksiz bir işlem değil.
Hakan 01 Kasım Pazartesi 2010 05:37 #19
Hocam sana çok ama çok acil ihtiyacım var. Mutlaka bitirmem gereken bir projem var, ama bir türlü tamamlıyamadım. Ben farklı bir siteden belli bilgileri çekmek istiyorum, çektiğim bilgiler üzerinde bazı oynamalarda yapmalıyım. Ama xml felan değil. Acil yardımını bekliyorum. şimdiden çok teşşekkür ederim
Mehmet Duran 01 Kasım Pazartesi 2010 11:39 #20
@Hakan, şu sıralar oldukça yoğunum. Ancak elimden geldiğince yardımcı olmaya çalışırım. Web ortamında istediğin adrese istekte bulunup, istediğin sonucu elde edebilirsin (izinlerin kıstıladığı alan içinde). Bunun için örnekleri nette de bulabilirsin.
Hakan 02 Kasım Salı 2010 19:58 #21
Tekrar merhaba, ya hocam aradım ama bir türlü bulamıyorum, lütfen yardım et bana, çıldırmak üzereyim. Yani başka siteden belli bir alanı çekme konusunda bana yardımcı olursan çok ama çok sevinirim. Nette bütün aramalarıma rağmen bir türlü bulamadım.
Mehmet Duran 06 Kasım Cumartesi 2010 12:55 #22
@Hakan, yardım etmek isterim ama ben de çok yoğunum. Soruna ancak cevap yazabiliyorum. Ben yardımcı olmasam da internette aradığın konuyla ilgili çokca döküman ve örnek var. Biraz araştırman faydalı olabilir.
Esat 15 Nisan Cuma 2011 10:38 #23
Güzel bir yazı, eline sağlık...
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Kimse sana senden iyi öğüt veremez.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009