Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kur Alma
#1
Bir bankanın kurlarını otomatik olarak nasıl alabilirim?
Don't fear the try!
WWW
Cevapla
#2
Bunun için bankanın web servis tarzı bir hizmeti var mı araştırılabilir.
Eğer yoksa bankanın web sayfası "parse" edilerek istenilen bilgiler alınabilir ki bence pek sağlıklı bir yöntem olmaz.
There's no place like 127.0.0.1
WWW
Cevapla
#3
Eğer serbest piyasa için almanız gerekirse Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol buradan çekebilirsiniz ama bankalarınkini büyük ihtimalle html parse etmeniz gerekecek.

“Do. Or do not. There is no try.”
Cevapla
#4
(07-02-2017, Saat: 16:36)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEğer serbest piyasa için almanız gerekirse Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol buradan çekebilirsiniz ama bankalarınkini büyük ihtimalle html parse etmeniz gerekecek.

type
  TKurBilgisi = class
   BultenNo: String;
   KurTarihi: TDate;
   DolarKuru: Double;
   EuroKuru: Double;
   CaprazKur: Double;
  end;

uses kısmına da bunların eklenmesi gerekiyor.
uses
 StrUtils, XMLIntf, MLDoc;
function GetTCMBGunlukKur: TKurBilgisi;
var
  XMLDocumentKur: TXMLDocument;
  XMLNode: IXMLNode;
begin
  Result := TKurBilgisi.Create;
  Result.BultenNo := '';
  Result.KurTarihi := 0;
  Result.DolarKuru := 0;
  Result.EuroKuru := 0;
  Result.CaprazKur := 0;

  XMLDocumentKur := TXMLDocument.Create(Application);
  try
    try
      XMLDocumentKur.Active := false;
      XMLDocumentKur.FileName := 'http://www.tcmb.gov.tr/kurlar/today.xml';
      XMLDocumentKur.Active := true;
    except
      raise Exception.Create('İnternet bağlantınızı kontrol edin. TCMB günlük kur bilgisine ulaşılamadı!');
    end;

    Result.BultenNo := XMLDocumentKur.DocumentElement.Attributes['Bulten_No'];
    Result.KurTarihi := StrToDateDef(XMLDocumentKur.DocumentElement.Attributes['Tarih'], 0);

    XMLNode := XMLDocumentKur.DocumentElement.ChildNodes.FindNode('Currency');
    repeat
      if XMLNode.HasAttribute('CurrencyCode') then
      begin
        if (XMLNode.Attributes['CurrencyCode'] = 'USD') then
        begin
          if XMLNode.ChildNodes.Nodes['ForexSelling'].Text = '' then
            raise Exception.Create('Merkez bankası Satış kur bilgisi hatalı. Gelen bilgi içeriği "' + XMLNode.ChildNodes.Nodes['ForexSelling'].Text + '"');

          Result.DolarKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
        end
        else if (XMLNode.Attributes['CurrencyCode'] = 'EUR') then
        begin
          if XMLNode.ChildNodes.Nodes['ForexSelling'].Text = '' then
            raise Exception.Create('Merkez bankası Satış kur bilgisi hatalı. Gelen bilgi içeriği "' + XMLNode.ChildNodes.Nodes['ForexSelling'].Text + '"');

          Result.EuroKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
        end;

      end;
      XMLNode := XMLNode.NextSibling;
    until XMLNode = nil;

    if (Result.DolarKuru <> 0) then
      Result.CaprazKur := Result.EuroKuru / Result.DolarKuru
    else
      Result.CaprazKur := 0;

    if Result.KurTarihi = 0 then
      raise Exception.Create('Merkez bankasından kur tarihi bilgisi okunamadı!');

  finally
    XMLDocumentKur.Free;
  end;
end;

Merkez bankası günlük kur bilgisini alıyor. Benim kullandığım kod içinde gereksiz olan kısımları kaldırdım ve modüler olması için değişiklik yaptım.
PostgreSQL - Linux - Delphi
Cevapla
#5
(07-02-2017, Saat: 16:08)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBunun için bankanın web servis tarzı bir hizmeti var mı araştırılabilir.
Eğer yoksa bankanın web sayfası "parse" edilerek istenilen bilgiler alınabilir ki bence pek sağlıklı bir yöntem olmaz.

Parse nasıl ediliyor peki

(07-02-2017, Saat: 16:36)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEğer serbest piyasa için almanız gerekirse Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol buradan çekebilirsiniz ama bankalarınkini büyük ihtimalle html parse etmeniz gerekecek.

html parser nasıl çekiliyor acaba?

(07-02-2017, Saat: 17:57)3ddark Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(07-02-2017, Saat: 16:36)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEğer serbest piyasa için almanız gerekirse Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol buradan çekebilirsiniz ama bankalarınkini büyük ihtimalle html parse etmeniz gerekecek.

type
  TKurBilgisi = class
   BultenNo: String;
   KurTarihi: TDate;
   DolarKuru: Double;
   EuroKuru: Double;
   CaprazKur: Double;
  end;

uses kısmına da bunların eklenmesi gerekiyor.
uses
 StrUtils, XMLIntf, MLDoc;
function GetTCMBGunlukKur: TKurBilgisi;
var
  XMLDocumentKur: TXMLDocument;
  XMLNode: IXMLNode;
begin
  Result := TKurBilgisi.Create;
  Result.BultenNo := '';
  Result.KurTarihi := 0;
  Result.DolarKuru := 0;
  Result.EuroKuru := 0;
  Result.CaprazKur := 0;

  XMLDocumentKur := TXMLDocument.Create(Application);
  try
    try
      XMLDocumentKur.Active := false;
      XMLDocumentKur.FileName := 'http://www.tcmb.gov.tr/kurlar/today.xml';
      XMLDocumentKur.Active := true;
    except
      raise Exception.Create('İnternet bağlantınızı kontrol edin. TCMB günlük kur bilgisine ulaşılamadı!');
    end;

    Result.BultenNo := XMLDocumentKur.DocumentElement.Attributes['Bulten_No'];
    Result.KurTarihi := StrToDateDef(XMLDocumentKur.DocumentElement.Attributes['Tarih'], 0);

    XMLNode := XMLDocumentKur.DocumentElement.ChildNodes.FindNode('Currency');
    repeat
      if XMLNode.HasAttribute('CurrencyCode') then
      begin
        if (XMLNode.Attributes['CurrencyCode'] = 'USD') then
        begin
          if XMLNode.ChildNodes.Nodes['ForexSelling'].Text = '' then
            raise Exception.Create('Merkez bankası Satış kur bilgisi hatalı. Gelen bilgi içeriği "' + XMLNode.ChildNodes.Nodes['ForexSelling'].Text + '"');

          Result.DolarKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
        end
        else if (XMLNode.Attributes['CurrencyCode'] = 'EUR') then
        begin
          if XMLNode.ChildNodes.Nodes['ForexSelling'].Text = '' then
            raise Exception.Create('Merkez bankası Satış kur bilgisi hatalı. Gelen bilgi içeriği "' + XMLNode.ChildNodes.Nodes['ForexSelling'].Text + '"');

          Result.EuroKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
        end;

      end;
      XMLNode := XMLNode.NextSibling;
    until XMLNode = nil;

    if (Result.DolarKuru <> 0) then
      Result.CaprazKur := Result.EuroKuru / Result.DolarKuru
    else
      Result.CaprazKur := 0;

    if Result.KurTarihi = 0 then
      raise Exception.Create('Merkez bankasından kur tarihi bilgisi okunamadı!');

  finally
    XMLDocumentKur.Free;
  end;
end;

Merkez bankası günlük kur bilgisini alıyor. Benim kullandığım kod içinde gereksiz olan kısımları kaldırdım ve modüler olması için değişiklik yaptım.
Parser yapmasını bilmiyorum bunu kendime göre nasıl ayarlayabilirim?
Don't fear the try!
WWW
Cevapla
#6
(08-02-2017, Saat: 10:46)cudyfoster Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlParse nasıl ediliyor peki

html parser nasıl çekiliyor acaba?

Parser yapmasını bilmiyorum bunu kendime göre nasıl ayarlayabilirim?

Internette "delphi html parse" şeklinde arama yapmayı denediniz mi? 
Ben şimdi google.com üzerinden denedim; onlarca örnek çıktı.
There's no place like 127.0.0.1
WWW
Cevapla
#7
(08-02-2017, Saat: 12:52)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-02-2017, Saat: 10:46)cudyfoster Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlParse nasıl ediliyor peki

html parser nasıl çekiliyor acaba?

Parser yapmasını bilmiyorum bunu kendime göre nasıl ayarlayabilirim?

Internette "delphi html parse" şeklinde arama yapmayı denediniz mi? 
Ben şimdi google.com üzerinden denedim; onlarca örnek çıktı.

Evet denedim. yazılım işinde yeni olduğum için doğruyu söylemek gerekirse çok fazla anlamadım google da gördüklerimden  Huh rusya merkez bankasının kurlarını otomatik çekmem gerekiyor ama nasıl yapılıyor beceremedim...
Don't fear the try!
WWW
Cevapla
#8
Merhaba,
Sayfa linkini paylaşabilir misiniz?
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#9
(08-02-2017, Saat: 14:01)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
Sayfa linkini paylaşabilir misiniz?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  çekmem gereken yer burası
Don't fear the try!
WWW
Cevapla
#10
Merhaba,
Site kaynak kodlarını incelediğimizde;

<table>
  <tbody>
    <tr>
      <th class="title"></th>
      <th><a href="https://cbr.ru/eng/currency_base/daily.aspx?date_req=08.02.2017">08.02.2017</a></th>
      <th><a href="https://cbr.ru/eng/currency_base/daily.aspx?date_req=09.02.2017">09.02.2017</a></th>
    </tr>
    <tr>
      <td class="title">
            US Dollar <ins>$</ins>
      </td>
      <td class="weak">
        <ins class="rubl">RUB</ins>&nbsp;59.1933</td>
      <td>
        <div class="w_data_wrap">
          <ins class="rubl">RUB</ins>&nbsp;<i class="up" title="+ 0.3196">↑</i>59.5129</div>
      </td>
    </tr>
    <tr>
      <td class="title">
            Euro <ins>€</ins>
      </td>
      <td class="weak">
        <ins class="rubl">RUB</ins>&nbsp;63.2362</td>
      <td>
        <div class="w_data_wrap">
          <ins class="rubl">RUB</ins>&nbsp;<i class="up" title="+ 0.2105">↑</i>63.4467</div>
      </td>
    </tr>
  </tbody>
</table>

Almak istediğiniz değerlerin <table> HTML tag'ları içerisine alındığını görüyoruz. 
Mantıken yapmanız gereken; benzersiz bir arama (Pos()) ve kopyalama (Copy()) kriteri ile asıl veriyi elde etmek. Üzerinde biraz çalışın, takıldığınız noktalarda yine yardımcı olalım.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Ip cameradan goruntulerini alma klavye 8 151 21-12-2017, Saat: 08:05
Son Yorum: Fesih ARSLAN
  Media player hızlı ileri alma Lord_Ares 2 134 29-11-2017, Saat: 01:26
Son Yorum: Lord_Ares
  Programda kullanılan bilesenlerin listesini alma klavye 2 154 14-09-2017, Saat: 15:17
Son Yorum: klavye
  function parametre vermeden sonuçu alma cinarbil 6 327 10-08-2017, Saat: 11:00
Son Yorum: esistem
  PaintBoxdan printer çıktısı alma hido 0 318 27-06-2017, Saat: 13:51
Son Yorum: hido



Konuyu Okuyanlar: 1 Ziyaretçi