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
#18
@mrmarman Birde al sat olsa ne iyi olur . ?
Cevapla
#19
Bankalar API destegi saglamaya basladi, islem yaptirmaya basladirlar mi emin degilim. BirAPI sitesinden takip edebilirsiniz.
Cevapla
#20
@mrmarman  merhaba,
İlk örnek veri ekranına ulaşılamadı uyarısı veriyor.
İkinci örneğiniz pasif olan çalıştı. Ancak sadece tek değer döndürüyor. Sizin örnekte iki değer dönmesi gerekiyor.
Acaba sayfalar mı güncellendi?

Aynı yöntemle görüntüdeki MA(7), EMA(25), KDJ gibi verilerin değerlerini de alabilir miyiz?

image.png
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Logo Go3 de döviz tablosunda Date_ alanına veri (Çözüldü) yazma cinarbil 4 177 19-04-2024, Saat: 08:25
Son Yorum: cinarbil
  IEC 61850 Potokolünden veri alma shooterman 1 449 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 15 824 08-03-2024, Saat: 00:06
Son Yorum: TuncayDelphi
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 8.184 25-12-2023, Saat: 11:35
Son Yorum: osiso
  .ini uzantısından ip ayarı çekmek bengoz 2 370 06-12-2023, Saat: 23:49
Son Yorum: 3ddark



Konuyu Okuyanlar: 1 Ziyaretçi