Author

Topic: interfacciarsi con le api di cryptsy (Read 1316 times)

legendary
Activity: 2632
Merit: 1040
August 01, 2013, 09:39:10 AM
#19
Ciao, giusto ieri sera mi sono scritto il client per interrogare le API in Java.
Se a qualcuno servisse mi chieda pure.....
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 31, 2013, 10:40:55 AM
#18
le api sono in un formato txt particolare. A questo punto so procedere da solo, ma mi domandavo se c'è un nome per questa particolare disposizione delle informazioni, in modo tale che posso cercare del codice che lo smembra e trova quel che mi serve in modo veloce. Tipo xpath per xml per intenderci.

Mi sembra che parecchie istruzioni richiedano il marketid.
Quindi ottengo una valanga di informazioni  con il method=getmarkets

Qui ottengo l'associazione valuta - marketid e anche valore di acquisto e vendita per ogni valuta

Per le altre interrogazioni bisogna sempre avere come chiave di ricerca questo marketid, non si potrebbe avere come chiave la valuta nelle 3 lettere identificative?

Perchè se è cosi per non avere sorprese forse prima bisogna lanciare questo getmarkets per avere seempre l'associazione id - nomevaluta aggiornato?
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 31, 2013, 03:29:23 AM
#17
e con grande soddisfazione che comunico che sono riuscito a fare la mia prima iterrogazione

Un forte ringraziamento a Pinbot e Cardedon, senza il cui aiuto non avrei concluso nulla.

full member
Activity: 140
Merit: 100
July 30, 2013, 01:39:30 PM
#16
la variabile headers è un array string di due elementi.
Il primo elemento conterrà Sign: xxxxx il secondo elemento conterrà Key: yyyyyy

Come puoi vedere viene indicato 'Sign:'.$sign. Questa sintassi indica che il primo valore dell'array è composto da una parte fissa ('Sign') concatenata da una parte variabile (.$sign)
Il punto in PHP indica la funzione concatena stringa.

Cmq nel caso in cui non riuscissi a fare lo script sappi che offro servizi per la realizzazione di software su misura.
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 30, 2013, 12:40:50 PM
#15
ok molto esauriente grazie

ho scitto un po di cavolate ma tutto sommato pensavo peggio.

Ho letto il discorso della conversione di quelle righe in formato riga comando. Cerchero di documentarmi.

Invece ti chiedo info su queste 3 righe

$headers = array(
                'Sign: '.$sign,
                'Key: '.$key,
        );

abbiamo la variavile sign e la variabile key che vengono in qualche modo unite nella varabile headers. Come si presenta alla fine la variabile headers?

sign = aaa
key = bbb

header risulta uguale a aaabbb ?

Per il resto non ho altre domande grazie dell'aiuto
full member
Activity: 140
Merit: 100
July 30, 2013, 12:18:53 PM
#14
Allora....... solo una cosa...... NESSUNO è qui per prenderti in giro o deriderti. E se parti già con questo spirito fai passare pure la voglia a chi ti vuole aiutare.

Ora un paio di risposte veloci

Quote
       curl_setopt($ch, CURLOPT_URL, 'https://www.cryptsy.com/api');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

Questa parte di codice richiama delle funzioni della libreria CURL. SETOPT è una funzione per impostare le opzioni di CURL. Non saprei come convertirle in riga di comando in quanto non conosco a fondo curl. Ti conviene leggerti la documentazione di curl per capire come passare queste stesse informazioni

Quote
$req['method'] = $method;
$req['nonce'] = $mt[1];

mi sembra di capire che req e una tabella
e metod e nonce elementi della tabella

 $post_data = http_build_query($req, '', '&');

prende la tabella e la converte in una variabile method=getinfo&nonce=32432543545
nel mio caso il  post data me lo ricaverei in una forma diversa da quella usata nella funzione

$req è una variabile dove vengono inserite le varie voci che compongono la POST REQUEST.
http_build_query concatena i vari elementi di $req per formare l'header

Quote
sign = hash_hmac("sha512", $post_data, $secret);

Con questa riga crei la signature da inserire nell'header per essere autorizzato all'uso dell'api.

Quote
$headers = array(
                'Sign: '.$sign,
                'Key: '.$key,
        );

Come indicato dalle istruzioni dell'API per funzionare la richiesta deve avere due header fondamentali. Sign e Key. Key contiene la tua api. Sign contiene la tua richiesta POST criptata con sha512 + secret key fornita dal sito

Quindi una volta impostato l'header (che non ha nulla a che vedere con il post data) devi inviare una richiesta POST che abbia l'header impostato come scritto sopra.
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 30, 2013, 07:21:17 AM
#13
ok, il php non lo so come del resto gli altri linguaggi, ma ci provo lo stesso.



Poi inoltre devo trasformare tutto in istruzione a riga comando che differisce dalle istruzioni passati alla chiamata dll di curl.

Volevo evitare una mia interpretazione intuitiva del codice per risparmiarmi figuracce, ma questo non è possibile. Almeno spero qualcuno si possa divertire

parto come i gamberi dalla parte che devo tradurre in riga comando
lasciando perdere l'inizializzazione che dovrebbe essere fatta a  ogn i lancio di curl sotto dos

qui vedo l'indirizzo del sito che nella riga comando va alla fine
la variabile postdata che dovrebbe essere passata con curl -d
la variabile header che dovrebbe essere passata con curl -h
riguardo ssl_verifypeer puo essere per instaurare un tipo di connession protetta, in questo caso il parametro --cacert cacert.pem dovrebbe bastare?

        curl_setopt($ch, CURLOPT_URL, 'https://www.cryptsy.com/api');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

function api_query($method, array $req = array()) {

$req['method'] = $method;
$req['nonce'] = $mt[1];

mi sembra di capire che req e una tabella
e metod e nonce elementi della tabella

 $post_data = http_build_query($req, '', '&');

prende la tabella e la converte in una variabile method=getinfo&nonce=32432543545
nel mio caso il  post data me lo ricaverei in una forma diversa da quella usata nella funzione

sign = hash_hmac("sha512", $post_data, $secret);

qui si genera la variabile criptata sign, post_data rimane una stringa non criptata

 $headers = array(
                'Sign: '.$sign,
                'Key: '.$key,
        );

qui si crea la variabile headers? non capisco cosa contiene

Poi ci rialacciamo alle prime righe, è giusto che devo passare la variabile post_data che non è stata criptata?

dovrebbe venire fuori qualcosa di dimile?

curl  --cacert cacert.pem  --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" -d "%post_data%" -h "%header%"  %url% > risultato.txt
full member
Activity: 140
Merit: 100
July 30, 2013, 02:02:45 AM
#12
ok grazie, quel sito o comunque era molto simile l'ho usato anch'ui per vedere se mi criptava in modo corretto. Quindi il criptare la variabile sign non è un problema
Piuttosto potrebbe essere un problema la formattazione delle  variabili di sign, ma come scritto sopra mi sembra di capire che si tratta di dividere le singole variabili con un "&"

Bene ora so che devo convertire in millisecondi.

Ora il 2 punti scoperti è verificare quale sia la sintassi corretta di CURL (magari quanto ho scritto sopra va bene)
e vedere un po come valorizzare la variabile post_data

un'ultima domanda
questa chiamata alal funzione

api_query("markettrades", array("marketid" => 26));

intuisco ma non sono sicuro che significa chre l'array creato ha un elemento della tabella di nome marketid il cui valore è ">26"

dopo quando questo array viene passato alla funzione http_build_query di php viene trasformato in una normalissima stringa di variabili con una & per dividere le variabili?

Scusami credo che tu abbia bisogno di studiare un pò meglio il linguaggio PHP e la sua sintassi. Sopratutto prima di addentrarti nel mondo dei parser e delle api d'interfaccia.
Senza offesa eh ma in più di un post ho notato che ti mancano delle solide basi di questo linguaggio per poter capire eventuali codici d'esempio.

api_query("markettrades", array("marketid" => 26)); richiama la funzione api_query utilizzando il metodo dell'api markettrades. Inoltre questo comando accetta dei parametri (vedi il sito per leggerti i parametri) e marketid è uno dei parametri per il metodo markettrades

Seeya
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 29, 2013, 05:33:28 PM
#11
ok grazie, quel sito o comunque era molto simile l'ho usato anch'ui per vedere se mi criptava in modo corretto. Quindi il criptare la variabile sign non è un problema
Piuttosto potrebbe essere un problema la formattazione delle  variabili di sign, ma come scritto sopra mi sembra di capire che si tratta di dividere le singole variabili con un "&"

Bene ora so che devo convertire in millisecondi.

Ora il 2 punti scoperti è verificare quale sia la sintassi corretta di CURL (magari quanto ho scritto sopra va bene)
e vedere un po come valorizzare la variabile post_data

un'ultima domanda
questa chiamata alal funzione

api_query("markettrades", array("marketid" => 26));

intuisco ma non sono sicuro che significa chre l'array creato ha un elemento della tabella di nome marketid il cui valore è ">26"

dopo quando questo array viene passato alla funzione http_build_query di php viene trasformato in una normalissima stringa di variabili con una & per dividere le variabili?
full member
Activity: 140
Merit: 100
July 29, 2013, 05:02:57 PM
#10
Per reference sulla chiave signed

http://www.freeformatter.com/hmac-generator.html

Io ho usato questo sito per capire se il mio algoritmo creava la sign corretta.

Microtime è il tempo attuale espresso in millisecondi percui è sicuramente un numero incrementale.
Come dice l'API il paramentro NONCE deve essere un intero incrementale.
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 29, 2013, 04:08:23 PM
#9
In quale linguaggio vuoi scrivere?
In ogni caso trovi degli esempi più esaustivi qui

https://btc-e.com/api/documentation

Tieni conto che la signature la vuole in formato esadecimale

il linguaggio che ho intenzione di utilizzare e discretamente sconosciuto ai programmatori seri pechè serve piu che altro a fare macro e cose semplici.
La parte di dover criptare la variabile sign non dev'essere un problema in quanto ho trovato del codice che mi esegue l'oprazione rilasciando come risultato codice esadecimale.

Per il resto devo usare la normali sintassi di curl a riga comando sotto dos

Ora sto cercando di capire quella funzione php di cryptsy (fine pagina) https://www.cryptsy.com/pages/api
In particolare vorrei capire cosa mi genera questa funzione di php explode(' ', microtime() per valorizzare la variabile nonce

Quindi avrei come risultato una cosa del genere, vorrei una conferma dove come variabile criptata ho la sign
intanto sarei contento fi dar andare una interrogazione che non passa valori numerici. Una getinfo potrebbe andare bene pensavo

sign = "method=getinfo&nonce=%mt%&(ecc.)"
poi la variabile sign la cripto nel formato richiesto

curl  --cacert cacert.pem  --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" -H "key=%APIKey%" -H "Sign=%sign%"   %url% > %file%"
nel post precedente ho messo la variabile nonce come a se stante, ma invece sembra vada inserita nella sign

vorrei avere un file con il contenuto dell'interrogazione. Eventuali codici di errori saranno nel file generato?

Vedo negli esempio anche il c. Non conosco i linguaggi, pero se avessi ovviamente una DLL in c che mi esegue le operazioni di interrogazione la cosa sarebbe ancora piu semplice.

Edit. Bene credo d'aver trovato del codice che mi trasforma l'ra attuale nel formato relativo a unix http://www.autohotkey.com/board/topic/2486-code-to-convert-fromto-unix-timestamp/
in che formato dev'essere l'output in millisecondi o secondi?

full member
Activity: 140
Merit: 100
July 29, 2013, 08:26:24 AM
#8
In quale linguaggio vuoi scrivere?
In ogni caso trovi degli esempi più esaustivi qui

https://btc-e.com/api/documentation

Tieni conto che la signature la vuole in formato esadecimale
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 29, 2013, 06:22:48 AM
#7
mi sono rimesso a leggere il codice php. Non dico di capire nulla, ma quasi

vedo questa funzione

mt = explode(' ', microtime()

che tipo di valore mi restituisce ? un certo valore  a partire dal 0:00:00 January 1, 1970 GMT ?

post_data = http_build_query($req, '', '&');

mi sembra di capire che questa funzione posso completamente eliminarla, si limita a dividere un array con delle & ? ( variabile1=valore&variabile2=valore)


e qui inizio a vagare nel buio

        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

sono 2 variabili giusto, ma la variabie headers gia contiene la post_data + la chiave identificativa tutto in modo criptato
rialacciandomi al post precedente

-H "key:%APIKey%" -H "Sign:%sign%"

qui la variabile headers viene divisa in 2 perfetto
forse va completata cosi anche

-H "key:%APIKey%" -H "Sign:%sign%" -H "nonce:%mt%"

ma devo passare gli stessi dati anche con la forma POSTFIELDS?
member
Activity: 64
Merit: 10
July 19, 2013, 05:49:09 PM
#6
Ma sotto cygwin almeno, spero..

curl  --cacert cacert.pem  --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" -d "Key=%PublicKey%&Sign=%variabilecriptata%" " %url% > %file%"

key e sign vanno passati come extra header, quindi col parametro -H

-H "key:%APIKey%" -H "Sign:%sign%"

Non è complesso, ti consiglio di analizzarlo pezzo per pezzo.
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 19, 2013, 05:32:37 PM
#5
Gpg è un programma alternativo a pgp per criptare/firmare. Se usi una distro gnu/linux, dovrebbe andare bene qualcosa di simile per il POST data (dopo aver importato la secret key):

POST='parametri post'
SIGN=`gpg --armor -s --digest-algo SHA512 <<< $POST`

$SIGN poi devi spedirlo come header (curl lo supporta). Devi comunque scriptare il tutto, percui penso ti convenga usare direttamente lo script php se non hai particolari esigenze.

grazie per le risposte

SOno in ambiente windows, fortunatamente sono riuscito a far andare del codice che dovrebbe criptare, ora sto cercando di capire che variabili passare in post.
Trasformare quella funziona di php in altra forma è complicato? traformare per sintassi curl da riga comando.

Per il momento sono riuscito a far autenticare e far andare la versione pubblica.

Pensavoa una cosa del genere

curl  --cacert cacert.pem  --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" -d "Key=%PublicKey%&Sign=%variabilecriptata%" " %url% > %file%"

dove variabile criptata contiene i parametri criptati scritti in formato esadecimale (l'user-agent devo ancora testarlo) mentre l'opzione cacert è necessaria.

Ho riletto e riletto quanto hai scritto, è discretamente concentrato.
Diciamo che usare il php (l'ho usato tantissimo tempo fa) lo prendo in considerazione se non  riesco in altri modi. Dovrei comunque far passare i contenuti di variabili dal mio linguaggio giocatolo allo script php e utilizzare il php in modo semplice. Le mie vecchie esperienze presupponevano l'installazione di un web server se non ricordo male per far girare il php.

Poi quello script risulta complicato,  è una funzione tuttofare. A me basterebbe vedere una sola riga curl da riga comando specifica per una sola operazione e dopo dovrei riuscire ad arrangiarmi.

Comunque ora cerco informazioni su questo "request header" che da quel che capisco contiene la chiave pubblica e la variabile criptata

Grazie mille

member
Activity: 64
Merit: 10
July 19, 2013, 10:06:38 AM
#4
Gpg è un programma alternativo a pgp per criptare/firmare. Se usi una distro gnu/linux, dovrebbe andare bene qualcosa di simile per il POST data (dopo aver importato la secret key):

POST='parametri post'
SIGN=`gpg --armor -s --digest-algo SHA512 <<< $POST`

$SIGN poi devi spedirlo come header (curl lo supporta). Devi comunque scriptare il tutto, percui penso ti convenga usare direttamente lo script php se non hai particolari esigenze.
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 18, 2013, 10:23:27 AM
#3
hai già provato ad usare gpg per firmare la POST request prima di passarla a curl?

Ti ringrazio e della risposta
Purtroppo sono un principiante e non capisco la risposta.

Anche la sintassi di curl è in fase di studio.

Pensavo l'utilizzi di curl in un modo simile

curl.exe -d "parametri post" indirizzoURL > filedovesalvarerisultato.txt

pero mi sembra di capire che i parametri vanno criptati mediante chiave generata da cryptsy.
Avevo trovato del codice che volevo usare sul linguaggio "giocatolo" che uso, ma da dei risultati che mi risulta siano errati
(http://www.autohotkey.com/board/topic/57617-hash-based-message-authentication-code-hmac/)

Quindi optavo per trovare un'alternativa, cos'è la gpg
member
Activity: 64
Merit: 10
July 18, 2013, 07:35:20 AM
#2
hai già provato ad usare gpg per firmare la POST request prima di passarla a curl?
sr. member
Activity: 1270
Merit: 254
Oikos.cash | Decentralized Finance on Tron
July 18, 2013, 02:59:54 AM
#1
Volevo poter interagire con tale sito nel modo piu semplice possibile. Pensavo a curl da linea comando
Ho provato da solo ma non ci capisco molto.
Mi sembra di capire che i dati vanno criptati
Quote
Sign — ALL POST data (param=val¶m1=val1) signed by a secret key according to HMAC-SHA512 method. Your secret key and public keys can be generated from your account settings page.

Mi danno le istruzioni per fare tutto in php, ma io vorrei utilizzare curl.
Qualche dritta?
Jump to: