Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Webden Bir Alandan Veri Çekmek
#11
Selamlar,
Bu verileri api üzerinden yapsak, api de ücretiz zateni daha sağlıklı olmaz mı? Bu şekilde nasıl yaparız.

https://api.binance.com/api/v1/ticker/pr...ol=BTCUSDT
Cevapla
#12
@crypto ;  daha kolayına hayır deme lüksümüz var mı ?  Smile Smile Smile

* Tecrübeyle sabittir, bilgi için yazıyorum; API'ler genellikle abonelik / üyelik / erişim için auth bunun için de key oluşturma vb. altyapı ister ki bu site istisna olmuş, teşekkürler bilgi için...

* Ayrıca soru  sorulurken eklenen aşağıdaki ifade beni bu varsayalına sevketti :

Alıntı: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)?

Son söz : 
Altyapınızı API'ler öncelikli kurmakta fayda var. Diğer yandan PARSE işlemine aşinalık da kazanmak lazım. Sayenizde bu başlık altında her ikisi de var oldu  Idea
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#13
O zaman ben de API kullanımını örneklendireyim de tam olsun Smile
Soruda XRP istenildiği için kullanacağımız link:
https://api.binance.com/api/v1/ticker/pr...bol=XRPBTC

Tools -> REST Debugger'ı açıp URL kısmına yukarıdaki linki yazıp Send Request'i tıklıyoruz.
Cevap geldikten sonra Copy Components'i seçip formumuza kopyaladığımız bileşenleri yapıştırıyoruz ve:
procedure TForm1.Button1Click(Sender: TObject);
var
 price: String;
begin
 RESTRequest1.Execute;
 if (RESTResponse1.StatusCode = 200) and  RESTResponse1.GetSimpleValue('price', price) then
   ShowMessage(price);
end;
There's no place like 127.0.0.1
WWW
Cevapla
#14
(06-06-2020, Saat: 23:53)SimaWB Adlı Kullanıcıdan Alıntı: O zaman ben de API kullanımını örneklendireyim de tam olsun Smile
Soruda XRP istenildiği için kullanacağımız link:
https://api.binance.com/api/v1/ticker/pr...bol=XRPBTC

Tools -> REST Debugger'ı açıp URL kısmına yukarıdaki linki yazıp Send Request'i tıklıyoruz.
Cevap geldikten sonra Copy Components'i seçip formumuza kopyaladığımız bileşenleri yapıştırıyoruz ve:
procedure TForm1.Button1Click(Sender: TObject);
var
 price: String;
begin
 RESTRequest1.Execute;
 if (RESTResponse1.StatusCode = 200) and  RESTResponse1.GetSimpleValue('price', price) then
   ShowMessage(price);
end;

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
#15
O zaman yukarıda @mrmarman belirttiği Indy ve OpenSSL'i araştırmalısınız.

Not: Yeni versiyon Delphi ısrarla tavsiye ederim.(Ücretsiz versiyonu var)
There's no place like 127.0.0.1
WWW
Cevapla
#16
@akissoftware

PHP'de Explode işlemlerini biliyor olmalısınız. İlk mesajınızda bu şekilde bir izlenimim oldu. Keza "Ben bunu php ile kolayca yapıyordum. " demişsiniz. Belkide direkt veriyi alıyorsunuz ama PHP'ye hakimseniz o kısmınız ile ilgileniyoruz...  Idea

* Delphi yakasında, Internet üzerinden ( IdHttp vb. ile url'sini vererek GET ile ) çektiğiniz bu veriyi string değişken altına alabiliyorsunuz zaten. 

* Delphi'de POS, COPY, DELETE vb. string komutlarına aşina olmanız lazım, değilseniz dahi PHP benzeri :
* Delphican içinde arama yaptım açık olarak ifade edilmiş @SimaWB 'in bu cevabını inceleyin. Explode için ne varsa aynen bu özellik TStringlist'in DelimitedText özelliğinde de var. Siz sadece ayraçları hedefinize ulaşana kadar algoritmik bir sıra ile yenileyeceksiniz o kadar.

Idea  Şimdi PHP ile Explode işlemini yapın, aynı algoritmayı TStringList'e uyarlayacaksınız.

Başarılar.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#17
@akissoftware özel mesaj ile sormanıza lüzum yok, buradan daha özel cevap da yazabiliriz... Merak eden herkese faydası olsun...

* Delphi 7 konusunda sıkıntı yaşamışlar. Bu nedenle  WinInet üzerinden herhangi bir VCL kullanmadan web sorgu ve parse örneğidir. 

* Bu şekilde tüm olası alternatif Web Sorgu örneklerini de bir başlıkta toplamış olduk...  Smile


Uses WinInet;

Type TDegerler = Record
  highPrice, lowPrice : String;
End;

function ETHBTC: TDegerler;
Const
  Url = 'https://api.binance.com/api/v3/ticker/24hr?symbol=ETHBTC';
var
  aStream       : TStringStream;
  hService      : HINTERNET;
  hSession      : HINTERNET;
  lpBuffer      : array[0..1023] of Byte;
  dwBytesRead   : DWORD;
  dwBytesAvail  : DWORD;
  dwTimeOut     : DWORD;
  Sessionname   : String;
  aResponse     : String;
  aSrc, aTemp   : String;
begin
  Result := Default( TDegerler );
// Browse Url Section
  Sessionname       := 'ARMAN_Session_' + DateTimeToStr(now);
  hSession          := InternetOpen( PWideChar(Sessionname), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
  if not Assigned(hSession) then Exit;
  try
    hService := InternetOpenUrl(hSession, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
    if hService = nil then
      Exit;

    aStream := TStringStream.Create;
    try
      dwTimeOut := 60000; // a minute
      InternetSetOption(hService, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
      if InternetQueryDataAvailable(hService, dwBytesAvail, 0, 0) then
        while ( InternetReadFile(hService, @lpBuffer[0], SizeOf(lpBuffer), dwBytesRead) )
          and ( dwBytesRead <> 0 )
            do aStream.WriteBuffer(lpBuffer[0], dwBytesRead);

      aStream.Position := 0;
      aResponse := aStream.DataString;
    finally
      InternetCloseHandle(hService);
      aStream.Free;
    end;
  finally
    InternetCloseHandle(hSession);
  end;

  if pos('{"code":', aResponse) = 1 then Exit; // Error occurs...

// Parse Section
  aTemp := aResponse;
  aSrc  := '"lowPrice":"';
  if Pos(aSrc, aTemp) > 0 then begin
    System.Delete(aTemp, 1, Pos(aSrc, aTemp) + Length(aSrc)-1 );
    Result.lowPrice   := Copy( aTemp, 1, Pos('"', aTemp ) -1 );
  end;

  aTemp := aResponse;
  aSrc  := '"highPrice":"';
  if Pos(aSrc, aTemp) > 0 then begin
    System.Delete(aTemp, 1, Pos(aSrc, aTemp) + Length(aSrc)-1 );
    Result.highPrice  := Copy( aTemp, 1, Pos('"', aTemp ) -1 );
  end;
end;


Kullanımı :

procedure TForm1.Button1Click(Sender: TObject);
var
  aDegerler : TDegerler;
begin
  aDegerler := ETHBTC;
  Showmessage( 'Low : ' + aDegerler.lowPrice + '  High : ' + aDegerler.highPrice );
end;

Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 7 1.069 24-07-2020, Saat: 16:00
Son Yorum: mad85
  Inform AP modeli Ups'den veri alma, bağlantı sağlama 41linea41 0 245 15-07-2020, Saat: 09:52
Son Yorum: 41linea41
  Web'den Veri Alma MEDCEZİR 2 536 08-07-2020, Saat: 13:41
Son Yorum: mrmarman
  Firebird - İçinde veri olan bir alanın tipini değiştirme habikus 3 637 07-06-2020, Saat: 23:32
Son Yorum: habikus
  ComboBox da Veri Listelemek OZCANK 15 2.413 25-04-2020, Saat: 09:01
Son Yorum: OZCANK



Konuyu Okuyanlar: 1 Ziyaretçi