Kur Bilgilerini YTL sayfasından alamıyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Kur Bilgilerini YTL sayfasından alamıyorum

Mesaj gönderen ademiz »

Arkadaşlar Merhabalar

Aşağıdaki kodu todayytl.html sayfasından kur bilgilerini çekmek için kullanmak istedim fakat bir türlü çekemedim.

Kod da benim göremediğim eksiğimi görüp çalışmasına yardımcı olacak arkadaşlarıma duyrulur.

Saygılar

Kod: Tümünü seç

procedure TDovizForm.BitBtn1Click(Sender: TObject);
var
  s,alis,satis,aranan: String;
  aranand:ARRAY  [1..100] OF String;
  yer,j: Integer;
begin
    begin
    DM.DovizADO.Edit;
    DM.DovizADO.FieldByName('Tarih').AsDateTime := Now;
    end;
    s:=IdHTTP1.Get('http://tcmb.gov.tr/kurlar/todayytl.html');
    DM.DovizADO.Last;
    DM.DovizADO.first;
    for j:=0 to DM.DovizADO.RecordCount-1 do
    begin
      aranand[j]:=DM.DovizADO.FieldByname('DovizAd').AsString;
      aranan:=aranand[j];
      yer:=pos(aranan,s);
      if yer=0 then
      begin
        Application.MessageBox('Kur bilgisi bulunamadı.','HATA',
                         mb_Ok + mb_IconExclamation + mb_DefButton1);
        exit;
      end
    else
      begin
        yer:=yer+length(aranan);
        s:=copy(s,yer,length(s)-yer);
        s:=trim(s);
        alis:=copy(s,1,9);
        DM.DovizADO.Edit;
        DM.DovizADO.FieldByName('DovizAlis').AsString := alis;
        s:=copy(s,10,length(s)-9);
        s:=trim(s);
        satis:=copy(s,1,9);
        DM.DovizADO.FieldByName('DovizSatis').AsString := satis;
        DM.DovizADO.Next;
      end;
  end;
end;
Misafir

Mesaj gönderen Misafir »

merhaba.
sayfanın sourcelerini aldığınız değişken 's' nin tipi string değil de ansistring olucak gibime geliyor.
kolay gelsin.
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

ondan değil delphi_coder arkadaş

daha gözden kaçan bişey
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Ben de S'yi string değil de TStringList yapsan diyordum, satır satır bakıp free etsen daha az karmaşık olmaz mıydı ? :o Doğrusu verdiğin kodu kurgulamak bana çok zor geldi... :oops:

- Sana herşeyi içinde bir örnek.. Boş bir form açıp denemek istersen diye yazdım.. Bir button koyup sadece aşağıdakileri copy/paste yap. IdHttp içinde create ediliyor. Forma koymana gerek yok. Ek olarak sadece Uses kısmına bir tane IdHttp unitini koyman yeterli...

- Detaylı olsun diye değişken sayısınıda üçe beşe bakmadım... :lol: Constant ifadede TIP degiskenini göründüğü üzere varsayılan olarak USD döviz tipini verdim... Bunu Var altına alıp kendi veritabanı döngünden sırayla almasını sağlarsın... :wink:

Kod: Tümünü seç

Const
  URL = 'http://tcmb.gov.tr/kurlar/todayytl.html';
  Tip = 'TRY/USD';
Var
  IdHttp1      : TIdHttp; // Uses IdHTTP
  Liste        : TStringList;
  Sayac        : Integer;
  Doviz,
  DovizAlis,
  DovizSatis,
  EfektifAlis,
  EfektifSatis : String;
begin
  IdHttp1 := TIdHttp.Create(Self);
  IdHttp1.Name            := 'IdHttp';
  IdHttp1.RecvBufferSize  := 32767;
  IdHttp1.HandleRedirects := True;
  IdHttp1.RedirectMaximum := 15;

  Liste   := TStringList.Create;
  Liste.Text := IdHttp1.Get(URL);
  For Sayac := 0 to Liste.Count-1 do
  If Pos(Tip, Liste[Sayac]) > 0 then
  begin
    Doviz := Copy(Liste[Sayac], 36, 55);
    Break; // Döngüden çık...
  end;
  Liste.Free;
  IdHttp1.Free;
  DovizAlis    := Trim(Copy(Doviz, 01, 13));
  DovizSatis   := Trim(Copy(Doviz, 14, 13));
  EfektifAlis  := Trim(Copy(Doviz, 30, 13));
  EfektifSatis := Trim(Copy(Doviz, 43, 13));
  ShowMessageFmt('DA:%s, DS:%s, EA:%s, ES:%s', [DovizAlis, DovizSatis, EfektifAlis, EfektifSatis]);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  s,alis,satis,aranan: String;
  aranand:ARRAY  [1..100] OF String;
  yer,j: Integer;
begin
    s:=IdHTTP1.Get('http://tcmb.gov.tr/kurlar/todayytl.html');
      aranan :='ABD DOLARI';
      //aranan := 'EURO';
      yer:=pos(aranan,s);
      if yer=0 then
      begin
        Application.MessageBox('Kur bilgisi bulunamadı.','HATA',
                         mb_Ok + mb_IconExclamation + mb_DefButton1);
        exit;
      end
    else
      begin
        yer:=yer+length(aranan);
        s:=copy(s,yer,length(s)-yer);
        s:=trim(s);
        alis:=copy(s,1,9);
        //DM.DovizADO.Edit;
        //DM.DovizADO.FieldByName('DovizAlis').AsString := alis;
        s:=copy(s,10,length(s)-9);
        s:=trim(s);
        satis:=copy(s,1,9);
        //DM.DovizADO.FieldByName('DovizSatis').AsString := satis;
        //DM.DovizADO.Next;
        showmessage(alis+#13+satis);
      end;

end;
bu çalışıyor.

kod çok spagettti bence biraz fonksiyonlara bölün. :roll:

iyi çalışmalar
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

@mrmcop abi olmuyo ya ben cevap yazıyordum üüü :cry:

:lol:
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba @mege

- Dostum, karmaşıklık konusunda tespit ve fikirler ortak.

Memnun oldum... :wink:
Resim
Resim ....Resim
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

Arkadaşlar

Hepinizden Allah razı olsun.Sizden sonra biraz uğraştım sorunun KOD da olmadığını farkettim.

Kod Database bağımlı çalıştığı için baştaki döngü bir kere girilmek üzere aşağıdaki kur kodu ve isimlerini ister.Geçen sene kullandığım kod olduğu için Database de de bilgi olmayınca o raya konulacak kayıtları fark edememişim.Bir kereye mahsun bu kayıtları Dataya ekleyince kodumuz sağlıklı çalıştı.

Hepinize Saygılar

Database : Dövizkodu ve DövizAdı sutunlarına girilecek değerler

Kod: Tümünü seç

TRY/USD  1 ABD DOLARI       
TRY/AUD  1 AVUSTRALYA DOLARI      
TRY/DKK  1 DANİMARKA KRONU    
TRY/EUR  1 EURO   
TRY/GBP  1 İNGİLİZ STERLİNİ      
TRY/CHF  1 İSVİÇRE FRANGI      
TRY/SEK  1 İSVEÇ KRONU        
TRY/CAD  1 KANADA DOLARI       
TRY/KWD  1 KUVEYT DİNARI       
TRY/NOK  1 NORVEÇ KRONU      
TRY/SAR  1 SUUDİ ARABİSTAN RİYALİ        
TRY/JPY  100 JAPON YENİ 
Cevapla