Webden Bir Alandan Veri Çekmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Merhaba.

Daha önce merkez bankasından kur çekimi gibi örnekler var fakat hepside bozulmuş durumda ve bir türlü başaramadım.

Örnek olarak bir web sayfasındaki ("https://www.binance.com/tr/trade/BNB_USDT") alanlardan "24S En Yüksek" alanındaki değeri programda Edit1 alanında görmek istiyorum.

Bunu nasıl yapabilirim?
Dosya ekleri
binance.png
binance.png (7.51 KiB) 3224 kere görüntülendi
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen mkysoft »

Görebildiğim kadarıyla API'si mevcut. API'leri kullanmanızı öneririm: https://binance-docs.github.io/apidocs
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Değerli üstadım Delphi'de her hangi bir apinin kullanımına örnek verebilir misiniz? Ben bu konuda hiç iş yapmadım
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen ertank »

Api işlemleri genellikle bir servis sağlayıcıdan başkasına değişir.
Yukarıdaki firma için aşağıdakiler gerekli:
- Ücretsiz üye olacaksınız.
- 2FA (İki faktörlü doğrulama) özelliğini açacaksınız. Ben bunu yaparken Google Authenticator kullanmanızı tavsiye ederim. Aksi halde cep telefonu numaranızı bildirmeniz gerekir.
- Hesabınıza giriş yaptıktan sonra fare imlecini sağ üst kısımdaki zil resmi solundaki figürü üzerine getirip api yönetimi seçeneğine girin.
- Api key için bir isim belirleyerek oluştur butonunu tıklayın.
- E-mail adresinizi kontrol edin. Gelen e-maili onaylayın.
- Tekrar api yönetimi kısmına girdiğinizde erişim için gerekli bilgilere ulaşmış olacaksınız.

Bundan sonra ilgili döküman ve örnek Github kodlarını inceleyerek ilerlemeniz gerekecektir. Görüldüğü kadarıyla sistem json iletişimi kullanmakta.

Eğer uygulamanızı satmayı planlıyor iseniz müşterilerinizin her birinin kendilerine apikey edinmiş olduğundan emin olmanızda fayda var. Genellikle ücretsiz kullanımlı hesapların api key erişimleri sınırlandırılıyor. Misal günlük maksimum 100 istek yapabiliyorsunuz.

Yukarıdaki firma için sınırlama var mı? Var ise sınırları nelerdir bilemiyorum.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen ertank »

Biraz göz gezdirince bazı bilgilerin ücretsiz ve apikey ve/veya secretkey olmadan okunmasına izin veren bir api yapısı olduğunu gördüm.

Ekte BTCUSDT fiyatını okuyan örnek uygulama bulabilirsiniz. Uygulama Delphi 10.3.3 uyumludur.

Oku butonunu tıkladığınızda en güncel fiyat bilgisini okumakta ve gelen json bilgisini ayıklamaktadır.
Dosya ekleri
SampleApi.7z
(52.6 KiB) 277 kere indirildi
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Üstadım çok çok teşekkür ederim. Tam istediğime benzer bir uygulama.

Peki Delphi 7 için düzenlemek çok mu zor olur? Zor derseniz bu versiyonla devam edeceğim.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen ertank »

TNetHTTPClient yerine IdHTTP bileşeni kullanabilirsiniz.
Delphi7'nin JSON kabiliyetlerini hiç bilmiyorum. Kendi çözümünüzü uygulayabilirseniz bu da çözülebilir.
Diğer taraftan tavsiyem mümkün olan en son Delphi sürümüne geçiş yapmanız olacaktır.
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Hiç api kullanmadan (Çünkü safya üyeliksiz girişe açık ve veriler açıkta duruyor) resimde koyduğum alandaki veriyi çekemez miyiz (Delphi 7 kullanıyorum)?

Ben bunu php ile kolayca yapıyordum. Delphi ile bir edit içerisinde gösteremez miyim?


Adres: "https://www.binance.com/tr/markets"
Mesela resimdeki gibi XRP nin "div.css-1ad2brd" alanındaki "0.00084913" değerini edit içerisinde görmek istiyorum.

Umarım anlatabilmişimdir.
Dosya ekleri
Delphi7.png
Delphi7.png (6.67 KiB) 3133 kere görüntülendi
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Arkadaşlar bu konuda yorum yapabilecek birileri var mı?

PHP ile parse yapılıp istediğim veriyi alabiliyordum fakat bunu Delphi 7 ile yapmak istiyorum. Çok araştırdım bir örnek bulamadım. Tecrübeli arkadaşların yardımına ihtiyacım var
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen mrmarman »

Merhaba.

* Sizin için çözüm üreten kod aşağıdadır.

:idea: Bonus olarak daha da gelişkin -bir defada birden fazla değer- sorgulamak isteyebileceğinizi değerlendirdim.

:arrow: Parametre olarak set halinde dilediğiniz kadar içeriğin high değerini bir defada string olarak döndürecektir.

Kod: Tümünü seç

uses System.Net.HttpClientComponent, System.Generics.Collections, JSON;

function GetBinanceHighValue( const xValues: array of string ): string;
const
  aUrl = 'https://www.binance.com/tr/trade/BNB_USDT';
var
  aClient : TNetHTTPClient;
  sJSON, sSearch   : String;
  aJSONData   : TJSONValue;
  aJSONValue  : TJSONValue;
  i : Integer;
begin
  Result := '';
  aClient := TNetHTTPClient.Create(nil);
  try
    aClient.UserAgent   := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'; // 'Dalvik/2.1.0 (Linux; U; Android 8.0.0; SM-N950F Build/R16NW)';
    aClient.Accept      := 'text/html';
    sJSON               := aClient.Get( aUrl ).ContentAsString;

  // Parse Section
  // ------------------------------------------------------------------------ //
    sSearch := '<textarea id="__APP_DATA" style="display: none">';
    if pos(sSearch, sJSON ) > 0 then
    begin
      System.Delete(sJSON, 1, Pos(sSearch, sJSON) + Length(sSearch)-1);
      sSearch := '"productMap":';
      if pos(sSearch, sJSON ) > 0 then begin
        System.Delete(sJSON, 1, Pos(sSearch, sJSON) + Length(sSearch)-1);
        sJSON := Copy(sJSON, 1, Pos(',"updateTime":', sJSON)-1);
      end;
    end;

  // -------------------------------------------------------------------------- //
  // JSON Parse section
  // -------------------------------------------------------------------------- //
    aJSONData := JSON.TJSONObject.ParseJSONValue( TEncoding.ASCII.GetBytes( Trim(sJSON) ), 0);
    try
      if aJSONData <> nil then
      begin
        for i := Low(xValues) to High(xValues) do begin
          if aJSONData.FindValue(xValues[i]) <> nil then
          begin
            aJSONValue := aJSONData.GetValue<TJSONObject>(xValues[i]);
            if aJSONValue.FindValue('high') <> nil then
            begin
              if Result = ''
                then Result := xValues[i] + ': ' + ((aJSONValue as TJSONObject).Get('high').JsonValue as TJSONString).Value
                else Result := Result + ', ' + xValues[i] + ': ' + ((aJSONValue as TJSONObject).Get('high').JsonValue as TJSONString).Value;
            end;
          end;
        end;
      end else begin
        sJSON := '';
        MessageDlg('Veri ekranına ulaşılamadı....', mtError, [mbOk], 0 );
      end;
    finally
      aJSONData.Free;
    end;
  finally
    FreeAndNil(aClient);
  end;
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Sonuclar : String;
begin
  Sonuclar := GetBinanceHighValue( [ 'ETHUSDT', 'BNBUSDT' ] );
  Showmessage( Sonuclar );
end;
Resim
Resim
Resim ....Resim
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Teşekkür ederim

peki "https://www.binance.com/tr/trade/BNB_USDT" bu sayfadaki "24S En Yüksek" değerini alma imkanımız var mı?

2.sorum sorgudan dönen birimin etiketini silme imkanımız olabillir mi? Yani "ETHUSDT: 247.87" gelen değeri "247.87" olarak gösteremez miyiz?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen mrmarman »

Delphi konusunda daha çok çalışmanız gerekiyor.

Kod: Tümünü seç

                then Result := xValues[i] + ': ' + ((aJSONValue as TJSONObject).Get('high').JsonValue as TJSONString).Value
                else Result := Result + ', ' + xValues[i] + ': ' + ((aJSONValue as TJSONObject).Get('high').JsonValue as TJSONString).Value;
olan yerdeki xValues + ': ' odaklanın deyip konuyu kapatıyorum. :idea:
Resim
Resim ....Resim
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

2.sorum tamam halloldu hocam çok çok teşekkür ederim.

Fakat 1.sorumdaki mesela "24s En Yüksek" değerinin karşılığını nereden bulacağım onu bilemedim. "ETHUSDT" dediğimizde ETH coininin USDT değerini çekebiliyoruz. Fakat bu değerlerin ne olduğunu nereden bulabilirim?

Çok çok teşekkür ederim
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: Webden Bir Alandan Veri Çekmek

Mesaj gönderen akissoftware »

Peki üstadım "https://api.binance.com/api/v3/ticker/24hr" bu adresten örnek veriyorum "WAVESBTC" symbolünün "highPrice" ve "lovPrice" değerlerini nasıl alabiliriz?


Delphi7 uyumlu da ayrıca sorsam neyi değiştirmem gerekir?
Cevapla