SQL Serverdan TCMB Web sitesine sorgu atarak döviz kurlarını nasıl alacağımızı göreceğiz.
- Yazılım Uzmanları
- 16 Mart 2022
- 5942 kez görüntülendi.
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>

Bu yazıya 3 yorum yapılmış.
Arkadaşlar merhaba, Web Api ler ile ilgili Stored Procedure leri https://github.com/YazilimUzmanlari/SQLServerWebRequest github adresinden bulabilirsiniz.
sp_GetHttpRequest kodunu paylaşma şansınız var mı?
Ü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?