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