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
- 4147 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?