SQL Serverdan TCMB Web sitesine sorgu atarak döviz kurlarını nasıl alacağımızı göreceğiz.

SQL Serverdan TCMB Web sitesine sorgu atarak döviz kurlarını nasıl alacağımızı göreceğiz. . Bunun için daha önce oluşturduğumuz sp_GetHttpRequest stored procedure kullanacağız. 

sp_GetTCMBExchangeRates adında stored procedure oluşturacağız. Bu stored procedure dışarıdan tarih parametresi alacak. 
Procedure içerisinde urlAddress ve responseText adında iki ayrı değişken tanımlıyoruz. 

Dışarıdan gelen tarih parametresi null ise kurları today.xml adresinden,tarih parametresi null değil ise yıl ay kataloğunun altında gün ay yıl xml adresinden verileir alacağız. Url addresimizi tarih parametresinin değerine belirlediğimize göre şimdi daha önce oluşturduğumuz sp_GetHttpRequest stored procedure una url adres, request method, content type, authorization, headerkey, headervalue, responsebody ve responsetext olarak sırasıyla değerleri veriyoruz. 

Sp_GetHttpRequest procedure umuzdan dönen responseText değerini XML değişkenine cast etmemiz gerekiyor. Bunun için önce xml tipinde responseXML alanına sahip ResponseTable adında bir temp table oluşturacağız. Web sitesinden dönen XML yapısı SQL XML yapısıyla uyumsuz olduğu için replace komutu ile bazı alanları replace edip temptable içerisindeki ResponseXML alanına kayıt olarak atıyoruz. 
Ardından ResponseTable tablomuzda ResponseXML değerinin içerisindeki  Tarih_date/currency node una uygun şekilde sorgumuzu oluşturuyoruz. Sorgumuzda Döviz Cinsi, Döviz Adı alış ve satış değerlerini görüntüleyecek şekilde select cümlemizi düzenliyoruz. 

 

Sorgumuzun Sonucu : 

 

Create proc [dbo].[sp_GetTCMBExchangeRates]
    @date        datetime = null
as
begin
    declare @urlAddress        nvarchar(max)
    declare @responseText    nvarchar(max)

    if (@date is null)
    begin
        set @urlAddress = 'https://www.tcmb.gov.tr/kurlar/today.xml'
    end
    else
    begin
        set @urlAddress = 'https://www.tcmb.gov.tr/kurlar/' + format(@date, 'yyyyMM') + '/' + Format(@date, 'ddMMyyyy') + '.xml'
    end

    exec sp_GetHttpRequest @urlAddress, 'GET', 'text/xml', null, null, null, null, @responseText out

    Create table #ResponseTable(ResponseXML xml)

    Insert Into #ResponseTable(ResponseXML)
    Select Replace(Replace(@responseText,'<?xml version="1.0" encoding="UTF-8"?>',''),'<?xml-stylesheet type="text/xsl" href="isokur.xsl"?>','') 
       
    select    b.Data.value('@Kod', 'nvarchar(5)') CurrencyCode, 
            b.Data.value('(CurrencyName/text())[1]', 'nvarchar(50)') CurrencyName, 
            Convert(datetime, b.Data.value('../@Tarih', 'nvarchar(20)'),103) [Date], 
            b.Data.value('(ForexBuying/text())[1]', 'float') ForexBuying,
            b.Data.value('(ForexSelling/text())[1]', 'float') ForexSelling,
            b.Data.value('(BanknoteBuying/text())[1]', 'float') BanknoteBuying,
            b.Data.value('(BanknoteSelling/text())[1]', 'float') BanknoteSelling
    From    #ResponseTable
        Cross apply #ResponseTable.[ResponseXML].nodes('/Tarih_Date//Currency') b(Data)
    drop table #ResponseTable
end

Dönen responseXML 

<Tarih_Date Tarih="15.03.2022" Date="03/15/2022" Bulten_No="2022/52">
  <Currency CrossOrder="0" Kod="USD" CurrencyCode="USD">
    <Unit>1</Unit>
    <Isim>ABD DOLARI</Isim>
    <CurrencyName>US DOLLAR</CurrencyName>
    <ForexBuying>14.7503</ForexBuying>
    <ForexSelling>14.7769</ForexSelling>
    <BanknoteBuying>14.7400</BanknoteBuying>
    <BanknoteSelling>14.7990</BanknoteSelling>
    <CrossRateUSD />
    <CrossRateOther />
  </Currency>
  <Currency CrossOrder="1" Kod="AUD" CurrencyCode="AUD">
    <Unit>1</Unit>
    <Isim>AVUSTRALYA DOLARI</Isim>
    <CurrencyName>AUSTRALIAN DOLLAR</CurrencyName>
    <ForexBuying>10.5828</ForexBuying>
    <ForexSelling>10.6519</ForexSelling>
    <BanknoteBuying>10.5342</BanknoteBuying>
    <BanknoteSelling>10.7158</BanknoteSelling>
    <CrossRateUSD>1.3905</CrossRateUSD>
    <CrossRateOther />
  </Currency>
</Tarih_Date>

İlgili Makaleler

Bu yazıya 1 yorum yapılmış.

  • Web sitelerinden alınan verilerin Sql e indirilmesi sonrasında Tablolara yazılması hk. -

    Üstad merhaba; Web sitelerinden alınan verilerin Sql e indirilmesi sonrasında Tablolara yazılması yazılmasında problem yaşıyorum. İndirilen veriyi bir tabloya ekleme için gerekli kodlar nelerdir yardımcı olabilir misiz?

Yorum Gönder