Json Apikey sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
meo
Üye
Mesajlar: 16
Kayıt: 01 Nis 2008 12:56

Json Apikey sorunu

Mesaj gönderen meo »

Json ile Hitbtc.com adresindeki hesabımdaki verileri okumak istioyrum. ama bir türlü yapamıyorum.

procedure TForm1.Button1Click(Sender: TObject);
begin
URL:= TIdHTTP.Create(nil);
try
jsonoutput:=URL.Get('https://api.hitbtc.com/api/2/public/ticker');
jsonaray:=TJSONObject.ParseJSONValue(jsonoutput) as TJSONArray;
StringGrid1.RowCount:=jsonaray.Count+1;
for I := 0 to jsonaray.Count-1 do
begin
StringGrid1.Cells[0,I+1]:= inttostr(I+1);
jsonobjekloop:= JSONaray.Get(i) as tJSONobject;
coinismi:=(jsonobjekloop.GetValue('symbol').Value);
StringGrid1.Cells[1,I+1]:= (jsonobjekloop.GetValue('symbol').Value);
end;
finally
Url.Free;
end
end;


bu şekilde koinlerin isimlerini listeliyebiliyorum. ama hesabımdaki miktarları programımda gösteremiyorum.
sitesinde şöyle bir formül var:
curl -u "publicKey:secretKey" https://api.hitbtc.com/api/2/trading/balance


curl -X GET -u "ff20f250a7b3a414781d1abe11cd8cee:fb453577d11294359058a9ae13c94713" \
"https://api.hitbtc.com/api/2/trading/balance"
The above command returns JSON structured like this:

[
{
"currency": "ETH",
"available": "10.000000000",
"reserved": "0.560000000"
},
{
"currency": "BTC",
"available": "0.010205869",
"reserved": "0"
}
]

Yardımcı olursanız çok sevinirim. Şimdiden teşekkür ederim.
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Json Apikey sorunu

Mesaj gönderen ertank »

Merhaba,

Kullandığınız Delphi sürümü nedir?
1- Sorununuz ticker bilgilerini sunucudan alabiliyor iken balance bilgilerini alamıyor olmak mı?
2- Yoksa balance bilgilerini sunucudan alabiliyorsunuz ancak bunları de-serialize edemiyor musunuz?

Deneme yapabilmek için geçerli kullanıcı ve şifre bilgilerini paylaşabilirseniz yardımcı olmak daha kolay olacaktır. Örnek verdiğiniz "curl -u" içindeki kullanıcı adı ve şifre bilgileri geçerli değil.
meo
Üye
Mesajlar: 16
Kayıt: 01 Nis 2008 12:56

Re: Json Apikey sorunu

Mesaj gönderen meo »

Kullandığım sürüm XE8

Ticker bilgilerini alabiliyorum. Çünkü Ticker bilgilerine ulaşmak için Publickey ve Secretkey e ihitiyaç yok.
Fakat balance bilgilerime ulaşmak için publickey ve secretkey i kullanmam gerek. sitede hesabımda bana ait olan keyler yazıyor. Ama bunları nasıl kullanacağımı bilemiyorum.

burada bir bilgi var ama çözemedim.

https://api.hitbtc.com/#authentication
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Json Apikey sorunu

Mesaj gönderen ertank »

curl -u parametresi basic authentication için kullanılır. Kullanıcı kodu ve şifre iki nokta üst üste ":" işareti ile ayrılır.

Delphi ile curl kullanımı mümkündür. Ancak yapılması istenilen işlem için buna gerek yoktur.

Örnek curl komutunu Delphi ile Indy10 bileşenleri kullanarak aşağıdaki gibi uygulayabilirsiniz:

Kod: Tümünü seç

uses
  IdBaseComponent,
  IdComponent,
  IdTCPConnection,
  IdTCPClient,
  IdHTTP,
  IdSSLOpenSSL,
  IdCompressorZLib;


function GetHttpData(const Url: string; out JsonResponse: string; UseAuthentication: Boolean = False): Boolean;
const
  UserCode = 'ff20f250a7b3a414781d1abe11cd8cee';  // Sizin kullanıcı kodunuz
  Password = 'fb453577d11294359058a9ae13c94713';  // Sizin şifreniz
var
  Http: TIdHTTP;
  Handler: TIdSSLIOHandlerSocketOpenSSL;
begin
  Http := nil;
  Handler := nil;
  Screen.Cursor := crHourGlass;
  try
    Http := TIdHTTP.Create(nil);
    Handler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Handler.SSLOptions.SSLVersions := [sslvSSLv23];
    Http.IOHandler  := Handler;
    Http.Compressor := TIdCompressorZLib.Create(Http);
    Http.HandleRedirects := True;
    Http.Request.UserAgent := 'Mozilla/5.0 (compatible)';  // Düzenlenmediği zaman bazı siteler bağlantıya izin vermiyor

    Http.Request.BasicAuthentication := UseAuthentication;
    if UseAuthentication then
    begin
      Http.Request.Username := UserCode;
      Http.Request.Password := Password;
    end;

    try
      JsonResponse := Http.Get(Url);
    except
      on E:Exception do
      begin
        JsonResponse := E.Message;
        Exit(False);
      end;
    end;
  finally
    Http.Free();
    Handler.Free();
    Screen.Cursor := crDefault;
  end;

  Result := True;
end;
Kullanımı aşağıdaki gibi olacaktır:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
  TICKERURL = 'https://api.hitbtc.com/api/2/public/ticker';
  BALANCEURL = 'https://api.hitbtc.com/api/2/trading/balance';
var
  Json: string;
begin
  if GetHttpData(TICKERURL, Json) then
  begin
    // veri ile ne yapılmak isteniyor ise...
  end
  else
  begin
    ShowMessage('HTTP ticker verisi alınamadı. Hata: ' + Json);
  end;
  
  // Authentication kullanılması için son parametre True olmalı
  if GetHttpData(BALANCEURL, Json, True) then
  begin
    // veri ile ne yapılmak isteniyor ise...
  end
  else
  begin
    ShowMessage('HTTP balance verisi alınamadı. Hata: ' + Json);
  end;
end;  
Örnekler Delphi 10.2.3 ile çalışmaktadır. delphi XE8 ile de çalışacaktır.
İletişim HTTPS (SSL) olacağı için EXE ile aynı dizine OpenSSL DLL dosyalarını kopyalamak gereklidir. Yoksa örnek kod çalışmayıp dll dosyaları bulunamadığına dair hata verecektir.
meo
Üye
Mesajlar: 16
Kayıt: 01 Nis 2008 12:56

Re: Json Apikey sorunu

Mesaj gönderen meo »

Hocam çok teşekkür ederim. Hata mesajı almıyorum. fakat " veri ile ne yapılmak isteniyor" kısmınıda bir örnek verebilirmisin? mesela alınan verileri memo1 yazdırabilirmiyiz. delphi konusunda yeniyim. Allah razı olsun çok işime yarıyacak inşAllah.
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Json Apikey sorunu

Mesaj gönderen ertank »

Aşağıdaki güncellemeleri yapıp uygulamayı çalıştırın. Exe dosya ile aynı dizinde oluşacak "ticker.json" ve "balance.json" dosyalarını forumda paylaşın. Bu bilgiler yardımı ile json de-serialize işlemine örnek kod yazmak mümkün olacaktır.

Mevcut kodun uses kısmını aşağıdaki gibi güncelleyin (System.IOUtils eklenecek):

Kod: Tümünü seç

uses
  IdBaseComponent,
  IdComponent,
  IdTCPConnection,
  IdTCPClient,
  IdHTTP,
  IdSSLOpenSSL,
  IdCompressorZLib,
  System.IOUtils;
Buton tıklama kodunu aşağıdaki gibi güncelleyin (TFile.WriteAllText satırları eklenecek):

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
  TICKERURL = 'https://api.hitbtc.com/api/2/public/ticker';
  BALANCEURL = 'https://api.hitbtc.com/api/2/trading/balance';
var
  Json: string;
begin
  if GetHttpData(TICKERURL, Json) then
  begin
    // veri ile ne yapılmak isteniyor ise...
    TFile.WriteAllText('ticker.json', Json);
  end
  else
  begin
    ShowMessage('HTTP ticker verisi alınamadı. Hata: ' + Json);
  end;
  
  // Authentication kullanılması için son parametre True olmalı
  if GetHttpData(BALANCEURL, Json, True) then
  begin
    // veri ile ne yapılmak isteniyor ise...
    TFile.WriteAllText('balance.json', Json);
  end
  else
  begin
    ShowMessage('HTTP balance verisi alınamadı. Hata: ' + Json);
  end;
end;
meo
Üye
Mesajlar: 16
Kayıt: 01 Nis 2008 12:56

Re: Json Apikey sorunu

Mesaj gönderen meo »

json.rar
(29.46 KiB) 69 kere indirildi
s.a.
Json çıktıları ektedir.

order.json

{
"ask": [
{
"price": "0.046002",
"size": "0.088"
},
{
"price": "0.046800",
"size": "0.200"
}
],
"bid": [
{
"price": "0.046001",
"size": "0.005"
},
{
"price": "0.046000",
"size": "0.200"
}
]
}




balance.json

[
{
"currency": "ETH",
"available": "10.000000000",
"reserved": "0.560000000"
},
{
"currency": "BTC",
"available": "0.010205869",
"reserved": "0"
}
]



ticker.json

[
{
"ask": "0.050043",
"bid": "0.050042",
"last": "0.050042",
"open": "0.047800",
"low": "0.047052",
"high": "0.051679",
"volume": "36456.720",
"volumeQuote": "1782.625000",
"timestamp": "2017-05-12T14:57:19.999Z",
"symbol": "ETHBTC"
}
]
meo
Üye
Mesajlar: 16
Kayıt: 01 Nis 2008 12:56

Re: Json Apikey sorunu

Mesaj gönderen meo »

Mesela order.json daki ilk "ask" içindeki price ve size bilgisini bir dizi değişkene aktarmak istiyorum.
order.json daki ilk "bid" içindeki price ve size bilgisini bir dizi değişkene aktarmak istiyorum.
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Json Apikey sorunu

Mesaj gönderen ertank »

Ekteki uygulamayı inceleyebilirsiniz.

- Uygulama json işlemleri için ücretsiz mORMot kodlarını kullanmaktadır.
- Framework kodları içinden gerekli dosyalar eklenmiş durumda. Framework'ün tamamını temin etmek istiyorsanız aşağıdaki bağlantıdan indirebilirsiniz:
https://synopse.info/files/mORMotNightlyBuild.zip
- Https erişimi için gerekli OpenSSL DLL dosyalarını EXE ile aynı dizine kopyalamanız gerekli
Dosya ekleri
hitbtc.com_json_api.7z
(374.89 KiB) 91 kere indirildi
Cevapla