Geçtiğimiz günlerde merkez bankası döviz kurları için kullanılan Html sayfasını kapatmış bulunmakta. Bunu bazı eski firmalar .xml servisleri açılmadan önce kullandığı için bu yenilik sayesinde artık xml yapısına geçmelidirler.
Bu durum için bir procedure hazırladım. Bu procedure için forma 1 tane "XMLDocument" nesnesi yerleştirmelisiniz.
Aşağıda dönen verileri almanız için gerekli notları bıraktım onları istediğiniz gibi txt dosyası içerisine kaydedebilirsiniz artık.
//Kullanımı: DovizIslemleri(XMLDocument1); Uses Vcl.ExtActns; procedure DovizIslemleri(XMLComp: TXMLDocument); var I: Integer; S, LocalFile, tmpUrl: String; HeaderNode, CurrNode: IXMLNode; {$REGION 'Gerekli Fonksiyonlar'} function DownloadURLFile(const UrlFile, LocalFile : TFileName) : boolean; begin Result:=True; with TDownLoadURL.Create(nil) do try URL:=UrlFile; Filename:=LocalFile; try ExecuteTarget(nil); except Result:=False; end; finally Free; end; end; function Kontrol(xDate:String;Url: String): String; var D1, D2, Tmp: String; begin Tmp := FormatDateTime('t',Now); if (Trim(xDate) = '') or (StrToTime(Tmp) < StrToTime('15:30')) then //2. koşulun sebebi saat 15:30 dan önce her zaman bir önceki günün değeri gelir Url := Format(Url,['today']) else begin D1 := FormatDateTime('yyyymm', StrToDate(xDate)); D2 := FormatDateTime('ddmmyyyy', StrToDate(xDate)); Tmp := D1 + '/' + D2 ; Url := Format(Url,[Tmp]); end; Result := Url; end; {$ENDREGION} begin try LocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.TMB.xml'; tmpUrl := Kontrol(DateToStr(Date),'http://www.tcmb.gov.tr/kurlar/%s.xml'); Screen.Cursor:=crHourglass; try if not DownloadURLFile(tmpUrl, LocalFile) then begin Screen.Cursor:=crDefault; Raise Exception.CreateFmt('İnternet ile ilgili bir problem ile karşılaşıldı lütfen tekrar deneyiniz..',[]); Exit; end; if not FileExists(LocalFile) then begin Screen.Cursor:=crDefault; raise exception.Create('Xml İndirilemedi!'); Exit; end; XMLComp.Active := False; XMLComp.FileName := LocalFile; XMLComp.Active:=True; HeaderNode := XMLComp.DocumentElement; S := HeaderNode.Attributes['Tarih'];// Tarih for i := 0 to HeaderNode.ChildNodes.Count - 1 do begin CurrNode := HeaderNode.ChildNodes.Get(I); {$REGION 'Dönenler'} (* //PARA KODU CurrNode.Attributes['Kod'] //<Unit> CurrNode.ChildNodes.Get(0).NodeValue; //<Isim> CurrNode.ChildNodes.Get(1).NodeValue; //<CurrencyName> CurrNode.ChildNodes.Get(2).NodeValue; //<ForexBuying> CurrNode.ChildNodes.Get(3).NodeValue; //<ForexSelling> CurrNode.ChildNodes.Get(4).NodeValue; //<BanknoteBuying> CurrNode.ChildNodes.Get(5).NodeValue; //<BanknoteSelling> CurrNode.ChildNodes.Get(6).NodeValue; //<CrossRateUSD> CurrNode.ChildNodes.Get(7).NodeValue; //<CrossRateUSD> CurrNode.ChildNodes.Get(8).NodeValue; *) {$ENDREGION} end; finally DeleteFile(LocalFile); Screen.Cursor:=crDefault; end; except on E: Exception do ShowMessage(E.Message); end;//try end;
Hiç yorum yok:
Yorum Gönder