Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Aplikacja z wykorzystaniem API


Rekomendowane odpowiedzi

Opublikowano

Witam

 

Jestem początkujacym użytkownikiem AutoIt.

 

Chciałbym napisac prostą aplikację do wyswietlania danych jednej z giełd.

Konkretnie BitMarket.pl

Giełda oferuje API publiczne i transakcyjne.

Czy ktośmożemnie uświadomic lub pokierować gdzie znajdę informację odnosnie sposobu wykorzystania API do pobierania danych i wyswietlania ich w AutoIt.

 

Pozdrawiam

1_Maciek

 

 

Opublikowano

Od właściciela skryptu albo admina strony. 

 

W sumie wszystko jest na stronie podane jakiego typu to dane i ja je pozyskać.

Wystarczy wczytać, przetworzyć i sobie wyświetlić w programie.

Jak pobierzesz dane to też mało ważne czy bezpośrednio czy przez api to  musisz je tylko odczytać. Z tego co widać obsługa tablic i winhttp albo najprostsza dla IE w zupełności wystarczy. 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

  • 2 tygodnie później...
Opublikowano

Od właściciela skryptu albo admina strony. 

 

W sumie wszystko jest na stronie podane jakiego typu to dane i ja je pozyskać.

Wystarczy wczytać, przetworzyć i sobie wyświetlić w programie.

Jak pobierzesz dane to też mało ważne czy bezpośrednio czy przez api to  musisz je tylko odczytać. Z tego co widać obsługa tablic i winhttp albo najprostsza dla IE w zupełności wystarczy. 

Witaj

Dzieki za odpowiedź, troche ogólnikowa jak dla takiego laika jak ja ale pierwszy etap mam już za sobą - sciaganie danych w formacie JSON i obrobka.

Kolejny etap wysyłanie zapytań iodbieranie informacji zwrotnej.

Myslę że wykorzystam WinHttp.

Opublikowano

Witajcie drodzy koledzy

Niestety muszę przyznać że zapytanie do powyższego api przerosło mnie.

Niestety nie kumam tematów z nagłowkami i niewiem jak to zaiplementować.

Dodatkowo nie wiem jak odczytać zwrotną informację

Czy ktoś z was może mi w tym pomóc?

Poniżej dołączam moje wypociny dla metody INFO

 

#include "WinHTTP.au3"    

Opt("MustDeclareVars", 1)

Global $hOpen = _WinHttpOpen()        ; uruchamiamy usluge winhttp
;MsgBox(0,"Open",$hOpen)
Global $connect = _WinHttpConnect($hOpen, "https://www.bitmarket.pl/api2/")
;MsgBox(0,"Połącz",$connect)
Global $zapytanie = _WinHttpOpenRequest($connect, "POST", "info?")

_WinHttpSendRequest($zapytanie)

; Wait for the response
Global $odpowiedz=_WinHttpReceiveResponse($zapytanie)

; Close it
_WinHttpCloseHandle($hOpen)

Opublikowano

Z tego co jest na githubie, to raczej mniej wiecej tak to powinno wygladac:

#include <Crypt.au3>
#include <Date.au3>
#include "WinHttp.au3"

bitmarket_api()

Func bitmarket_api()
	;https://www.bitmarket.pl/apikeys.php
	Local $key = "klucz_jawny";
	Local $secret = "klucz_tajny";

	Local $hOpen = _WinHttpOpen()
	Local $hConnect = _WinHttpConnect($hOpen, "https://www.bitmarket.pl/api2/")
	Local $hRequest = _WinHttpOpenRequest($hConnect, "POST")

	Local $tonce = _DateDiff('s', "1970/01/01 00:00:00", _NowCalc())
	Local $params = "method=info&tonce=" & $tonce

	Local $sign = hmac($params, $secret)

	_WinHttpAddRequestHeaders($hRequest, "API-Key: " & $key)
	_WinHttpAddRequestHeaders($hRequest, "API-Hash: " & $sign)

	_WinHttpSendRequest($hRequest, -1, $params)

	_WinHttpReceiveResponse($hRequest)

	If _WinHttpQueryDataAvailable($hRequest) Then
		ConsoleWrite(_WinHttpQueryHeaders($hRequest) & @CRLF)
	Else
		MsgBox(48, "Error", "Site is experiencing problems.")
	EndIf

	_WinHttpCloseHandle($hRequest)
	_WinHttpCloseHandle($hConnect)
	_WinHttpCloseHandle($hOpen)
EndFunc   ;==>bitmarket_api

Func hmac($message, $key, $hash = "SHA512")
	Local $blocksize = 64
	Local $a_opad[$blocksize], $a_ipad[$blocksize]
	Local Const $oconst = 0x5C, $iconst = 0x36
	Local $opad = Binary(''), $ipad = Binary('')
	$key = Binary($key)
	If BinaryLen($key) > $blocksize Then $key = Call($hash, $key)
	For $i = 1 To BinaryLen($key)
		$a_ipad[$i - 1] = Number(BinaryMid($key, $i, 1))
		$a_opad[$i - 1] = Number(BinaryMid($key, $i, 1))
	Next
	For $i = 0 To $blocksize - 1
		$a_opad[$i] = BitXOR($a_opad[$i], $oconst)
		$a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
	Next
	For $i = 0 To $blocksize - 1
		$ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
		$opad &= Binary('0x' & Hex($a_opad[$i], 2))
	Next
	Return Call($hash, $opad & Call($hash, $ipad & Binary($message)))
EndFunc   ;==>hmac

Func SHA512($message)
	Return _Crypt_HashData($message, 0x0000800e)
EndFunc   ;==>SHA512

Aktualnie wywala error, bo nie mam tam konta i klucze ktore podaje sa zle (chyba).

 

 

Opublikowano

Dzieki za pomoc.

Wygenerowalem klucze, podmieniłem i nadal wywala błąd 400 (Błędne zapytanie)

Niestety jestem za słaby aby znaleść przyczynę.

BAle będę próbował.

Opublikowano

Wywala ponizszy komunikat:

 

HTTP/1.1 400 Bad Request
Connection: close
Date: Wed, 01 Feb 2017 17:41:19 GMT
Content-Length: 275
Content-Type: text/html
Server: cloudflare-nginx
CF-RAY: -
 

Jedyną rzecz na jaką zwróciłem uwagę to godzina ktora jest równo o 1 godzinę wcześniejsza.

Może to ma znaczenie

W opisie na BitHubie pisze że parametr tonce nie może się różnic o więcej niż 5sekund niz czas serwera.

Opublikowano

To nie umiesz jedenej godziny odjac?

Zreszta to i tak bez znaczenia.

Local $tonce = _DateDiff('s', "1970/01/01 00:00:00", _DateAdd("h", -1,_NowCalc()))

Dalej ten sam error.

 

Sprawdz fiddlerem co faktycznie jest wysylane. :)

 

 

Opublikowano

Jak skonfigurować Fiddlera lub co dopisac aby Fiddler odczytywał zapytania z aplikacji.

Przpraszam za głupie pytania ale jestem laikiem w tej dziedzinie.

 

Pozdrawiam

1_Maciek

Opublikowano

Chyba nic, moze ewntualnie zaznacz wszystko w: Tools>Telerik Fiddler options->HTTPS

Wywalilem rowniez ten UDF "WinHttp.au3", bo same problemy z nim.

#include <Crypt.au3>
#include <Date.au3>

bitmarket_api()

Func bitmarket_api()
	;https://www.bitmarket.pl/apikeys.php
	Local $key = "klucz_jawny";
	Local $secret = "klucz_tajny"

	Local $tonce = _DateDiff('s', "1970/01/01 00:00:00", _DateAdd("h", -1, _NowCalc()))
	Local $params = "method=info&tonce=" & $tonce

	Local $sign = hmac($params, $secret)

	$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
	$oHTTP.Open("POST", "https://www.bitmarket.pl/api2/", False)
	$oHTTP.SetProxy(2, "127.0.0.1:8888") ; Tylko na potrzeby korzystania z Fiddlera

	$oHTTP.SetRequestHeader("API-Key", $key)
	$oHTTP.SetRequestHeader("API-Hash", Hex($sign))

	$oHTTP.Send($params)

	$oReceived = $oHTTP.ResponseText
	$oStatusCode = $oHTTP.Status

	If $oStatusCode <> 200 Then
		MsgBox(4096, "Response code", $oStatusCode)
	Else
		MsgBox(0, "ResponseText", $oReceived)
	EndIf
EndFunc   ;==>bitmarket_api

Func hmac($message, $key, $hash = "SHA512")
	Local $blocksize = 64
	Local $a_opad[$blocksize], $a_ipad[$blocksize]
	Local Const $oconst = 0x5C, $iconst = 0x36
	Local $opad = Binary(''), $ipad = Binary('')
	$key = Binary($key)
	If BinaryLen($key) > $blocksize Then $key = Call($hash, $key)
	For $i = 1 To BinaryLen($key)
		$a_ipad[$i - 1] = Number(BinaryMid($key, $i, 1))
		$a_opad[$i - 1] = Number(BinaryMid($key, $i, 1))
	Next
	For $i = 0 To $blocksize - 1
		$a_opad[$i] = BitXOR($a_opad[$i], $oconst)
		$a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
	Next
	For $i = 0 To $blocksize - 1
		$ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
		$opad &= Binary('0x' & Hex($a_opad[$i], 2))
	Next
	Return Call($hash, $opad & Call($hash, $ipad & Binary($message)))
EndFunc   ;==>hmac

Func SHA512($message)
	Return _Crypt_HashData($message, 0x0000800e)
EndFunc   ;==>SHA512


Teraz wszystko ladnie widac w Fiddlerze i jest rowniez odpowiedz z servera. :)

{"error":501,"errorMsg":"Invalid API key","time":1486037641}

 

 

Opublikowano

A mnie wywala błąd przy funkcji: $oHTTP.Send($params)

 

Poniżej:

==> The requested action with this object has failed.:

 

Czy ta funkcja nie powinna mieć więcej parametrów?

Opublikowano

Niestety wywala komunikat:

{"error":502,"errorMsg":"Invalid message hash","time":1486047914}

 

Wygenerowałem nowe klucze

porównalem Hash generowany przez aplikację i kalkulator w Fiddlerze- generują różne wartości

Chyba jest problem z funkcją generowania hash.

 

 

Opublikowano

;(

Nie wiedziałemże będzie to takie trudne

Jednak musi być kodowanie hmac.

 

W róznych źródłach znalazłem sprzeczne informacje odnośnie długości blocksize 64 i 128

Opublikowano

Przeanalizowałem inne giełdy i okazało się że giełda BitBay.net posiada praktycznie identyczną strukturę zapytań.

Skrypt przerobiłem do generowania zapytań pod ta giełdę.

Informacje zwrotne równiez generują podobny komunikat o błędzie hash.

Oto on:

{"code":502,"message":"Invalid sign"}

 

Jezeli ktoś będzie chciał pomóc rozwiązać problem zapraszam do współpracy.

Poniżej kody do konta w BitBay.net:

Local $key = "391d4c03f5b76eba1cc8ab300157006d";
Local $secret = "1e517f20eb643b8bc1125adbb3aa3e6c";

 

Kody sa wygenerowane dla pustego konta, bez historii transakcji,

 

 

Poniżej kody dostepu do konta na BitMarket.pl

Local $key = "443322c200972631158f2bd423e8b52f"

Local $secret = "9c405c284947bca5f66ae51a86c0eccb"

 

Konto równiez jest puste i nie posiada żadnej historii

 

Pozdrawiam

1_Maciek

Opublikowano

No jak na poczatkujacego to niezle zadanie sobie wybrales. ;)

Do tego rowniez autoit nie jest raczej najlepszym wyborem do tego typu taska. Parsowanie jsona i tworzenie requestow tez jest lekko irytujace z racji braku odpowiednich bibliotek. 

#include <Crypt.au3>
#include <Date.au3>

bitmarket_api()

Func bitmarket_api()
	;https://www.bitmarket.pl/apikeys.php
	Local $key = "443322c200972631158f2bd423e8b52f"
	Local $secret = "9c405c284947bca5f66ae51a86c0eccb"

	Local $tonce = _DateDiff('s', "1970/01/01 00:00:00", _DateAdd("h", -1, _NowCalc()))
	Local $params = "method=info&tonce=" & $tonce

	Local $sign = hmac($params, $secret)

	$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
	$oHTTP.Open("POST", "https://www.bitmarket.pl/api2/", False)
	$oHTTP.SetProxy(2, "127.0.0.1:8888") ;Tylko na potrzeby Fiddlera

	$oHTTP.SetRequestHeader("API-Key", $key)
	$oHTTP.SetRequestHeader("API-Hash", StringLower(Hex($sign)))

	$oHTTP.Send($params)

	$oReceived = $oHTTP.ResponseText
	$oStatusCode = $oHTTP.Status

	If $oStatusCode <> 200 Then
		MsgBox(4096, "Response code", $oStatusCode)
	Else
		MsgBox(0, "ResponseText", $oReceived)
	EndIf
EndFunc   ;==>bitmarket_api

Func hmac($message, $key, $hash = "SHA512")
	Local $blocksize = 128
	Local $a_opad[$blocksize], $a_ipad[$blocksize]
	Local Const $oconst = 0x5C, $iconst = 0x36
	Local $opad = Binary(''), $ipad = Binary('')
	$key = Binary($key)
	If BinaryLen($key) > $blocksize Then $key = Call($hash, $key)
	For $i = 1 To BinaryLen($key)
		$a_ipad[$i - 1] = Number(BinaryMid($key, $i, 1))
		$a_opad[$i - 1] = Number(BinaryMid($key, $i, 1))
	Next
	For $i = 0 To $blocksize - 1
		$a_opad[$i] = BitXOR($a_opad[$i], $oconst)
		$a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
	Next
	For $i = 0 To $blocksize - 1
		$ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
		$opad &= Binary('0x' & Hex($a_opad[$i], 2))
	Next
	Return Call($hash, $opad & Call($hash, $ipad & Binary($message)))
EndFunc   ;==>hmac

Func SHA512($message)
	Return _Crypt_HashData($message, 0x0000800e)
EndFunc   ;==>SHA512

 
{"success":true,"data":{"balances":{"available":{"PLN":0.00000000,"EUR":0.00000000,"BTC":0.00000000,"LTC":0.00000000,"ETH":0.00000000,"DOGE":0.00000000,"PPC":0.00000000,"LiteMineX":0.00000000,"PlnX":0.00000000},"blocked":{"PLN":0.00000000,"BTC":0.00000000,"EUR":0.00000000,"LTC":0.00000000,"ETH":0.00000000,"LiteMineX":0.00000000,"PlnX":0.00000000}},"account":{"turnover":0.0000,"commissionMaker":0.1500,"commissionTaker":0.4500},"bank_deposit_fiat":{"PLN":{"seed":2490102890000005,"bank_name":"BZ WBK","pay_to":"Agent BM","acc_num":"00000000000000000000000000","transfer_title":"zasilenie konta w BM login zofija"},"EUR":{"seed":2490000500004600,"bank_name":"BZ WBK","swift_code":"WBKPPLPP","pay_to":"BM Agent","acc_num":"00000000000000000000000000","transfer_title":"deposit in BM login zofija"}}},"time":1486122887,"limit":{"used":3,"allowed":600,"expires":1486123200}}

 

 

Opublikowano

Wielkie dzięki za pomoc.

Trzeba stawiać sobie trudne cele.

W miedzy czasie próbowałem wygenerować HMAC przez generatory dostepne w sieci i rownież otrzymywałem kod błedu.

Jak to skończe zabieram się za Api do BitMarket24.pl

To też będzie wyzwanie

 

Pozdrawiam

1_Maciek

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...