2 Ekim 2014 Perşembe

Delphi Türkiye Merkez Bankası Döviz Kurlarını Okuma

Merhabalar,



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;