delphi döviz çekme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ozlemsaltan
Üye
Mesajlar: 38
Kayıt: 01 Nis 2014 05:57

delphi döviz çekme

Mesaj gönderen ozlemsaltan »

Arkadaşlar merhaba. Merkez bankasının değişikliği üzerine artık .xml şeklinde yayınlanıyor döviz bilgileri. Benim projemde döviz bilgilerini getirtebiliyorum fakat bu çektiğim xml dosyasını kendim düzenlediğim şekilde txt dosyasına atmam gerekli. Örneğin sadece usd,euro döviz bilgilerini şu şekilde yazdırmak istiyorum
Örneğin;
INSERT INTO dovizkur SET DOVIZ_ID=2, KISA="USD",TRH="2014-10-02" ,ALIS="2.2829",SATIS="2.2871",EFEKTIF_ALIS="2.2813",EFEKTIF_SATIS="2.2905";
INSERT INTO dovizkur SET DOVIZ_ID=3, KISA="EUR",TRH="2014-10-02" ,ALIS="2.8771",SATIS="2.8823",EFEKTIF_ALIS="2.8751",EFEKTIF_SATIS="2.8866";

Kodsal açıdan bir türlü işin içinden çıkamadım.Çok teşekkürler şimdiden
Çaylak yazılımcı:)
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: delphi döviz çekme

Mesaj gönderen barisatalay »

Gerekli Kodları ekleyin Forma 1 tane XMLDocument Nesnesi ekleyin.
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.

Kod: Tümünü seç

//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;
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: delphi döviz çekme

Mesaj gönderen xozcanx »

Merhaba;
Sadece USD ve EURO için banka alış bilgilerini aşağıdaki kodlada yapabilirsiniz, farklı bir yöntem tabi.

Kod: Tümünü seç

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
.
.
  private
    Procedure kurbilgileri;
.
.
.
Procedure TForm1.kurbilgileri;
var
  ADRES,DEGER,ARA,SATIS:string;
  YER:integer;
begin
  ADRES:=IdHTTP1.Get('http://www.tcmb.gov.tr/kurlar/today.xml');
  DEGER:=ADRES;

  ARA:='US DOLLAR';
  YER:=POS(ARA,DEGER);
  YER:=YER+length(ARA);
  DEGER:=COPY(DEGER,YER,LENGTH(DEGER)-YER);
  DEGER:=TRIM(DEGER);
  SATIS:=COPY(DEGER,1,LENGTH(DEGER)-YER);
  ARA:='<BanknoteBuying>'; //  Banka Alış Fiyatıdır.
  YER:=pos(ARA,DEGER);
  YER:=YER+LENGTH(ARA);
  DEGER:=COPY(DEGER,YER,LENGTH(DEGER)-YER);
  DEGER:=TRIM(DEGER);
  SATIS:=COPY(DEGER,1,LENGTH(DEGER)-YER);
  Edit1.Text    :=COPY(SATIS,1,6); // sonuc

  ARA:='EURO';
  YER:=POS(ARA,DEGER);
  YER:=YER+LENGTH(ARA);
  DEGER:=COPY(DEGER,YER,LENGTH(DEGER)-YER);
  DEGER:=TRIM(DEGER);
  SATIS:=COPY(DEGER,1,LENGTH(DEGER)-YER);
  ARA:='<BanknoteBuying>';    //  Banka Alış Fiyatıdır.
  YER:=POS(ARA,DEGER);
  YER:=YER+LENGTH(ARA);
  DEGER:=COPY(DEGER,YER,LENGTH(DEGER)-YER);
  DEGER:=TRIM(DEGER);
  SATIS:=COPY(DEGER,1,LENGTH(DEGER)-YER);
  Edit2.Text    := COPY(SATIS,1,6); // sonuc
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  kurbilgileri;
end;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla