2016-08-09 4 views

Antwort

0

Ich denke, es gibt Entsprechung, wenn Sie "tx_history" -Befehl im Socket verwenden, aber Sorry, Ihnen zu sagen, dass das Json-Ergebnis nicht mit Ihrem spezifischen Datenergebnis übereinstimmen.

Ripple Daten Apiv2 wird von Ajax gespielt. Das Ergebnis sehen json Formatierer in Welligkeit für den Austausch:

} else if (resp.rows.length) { 
    resp.rows[0] = { 
     base_currency: resp.rows[0].base_currency, 
     base_issuer: resp.rows[0].base_issuer, 
     base_amount: resp.rows[0].base_amount, 
     counter_amount: resp.rows[0].counter_amount, 
     counter_currency: resp.rows[0].counter_currency, 
     counter_issuer: resp.rows[0].counter_issuer, 
     rate: resp.rows[0].rate, 
     executed_time: resp.rows[0].executed_time, 
     ledger_index: resp.rows[0].ledger_index, 
     buyer: resp.rows[0].buyer, 
     seller: resp.rows[0].seller, 
     taker: resp.rows[0].taker, 
     provider: resp.rows[0].provider, 
     autobridged_currency: resp.rows[0].autobridged_currency, 
     autobridged_issuer: resp.rows[0].autobridged_issuer, 
     offer_sequence: resp.rows[0].offer_sequence, 
     tx_type: resp.rows[0].tx_type, 
     tx_index: resp.rows[0].tx_index, 
     node_index: resp.rows[0].node_index, 
     tx_hash: resp.rows[0].tx_hash 
    }; 
    } 

    res.csv(resp.rows, filename); 
} else { 
    res.json({ 
    result: 'success', 
    count: resp.rows.length, 
    marker: resp.marker, 
    exchanges: resp.rows 
    }); 
} } 

und es kann nur den Zugriff durch get url sein:

Route: ‚/ v2/Börsen/{: base}/{: counter}‘

, die dort server.js binden wird:

app.get ('/ v2/exchanges /: base /: counter', routes.getExchanges);

und letzter Hinweis ist dies ihre Datenbankabfrage mit hbase:

HbaseClient.getExchanges = function (Optionen, Rückruf) {
var base = options.base.currency + '|' + (options.base.issuer || ''); var counter = options.counter.currency + '|' + (options.counter.issuer || ''); var Tabelle; var keyBase; var startRow; var endRow;

var absteigend;

var-Spalten;

if (counter.toLowerCase()> base.toLowerCase()) { keyBase = Basis + '|' + Zähler;

} sonst { keyBase = Zähler + '|' + Basis; options.invert = wahr; }

if (! Options.interval) { table = 'Austausch'; absteigend = Optionen.absteigend? wahr falsch; options.unreduced = true;

//only need certain columns 
if (options.reduce) { 
    columns = [ 
    'd:base_amount', 
    'd:counter_amount', 
    'd:rate', 
    'f:executed_time', 
    'f:buyer', 
    'f:seller', 
    'f:taker' 
    ]; 
} 

} else if (exchangeIntervals.indexOf (options.interval) == -1!) { keyBase = options.interval + '|' + SchlüsselBase; absteigend = Optionen.absteigend? wahr falsch; Tabelle = 'agg_exchanges';

} else { Rückruf ('ungültiges Intervall:' + Optionen.Intervall); Rückkehr; }

startRow = keyBase + '|' + Optionen.start.hbaseFormatStartRow();
endRow = keyBase + '|' + Optionen.end.hbaseFormatStopRow();

if (options.autobridged) { options.filterstring = "DependentColumnFilter ('f', 'autobridged_currency')"; if (Spalten) { columns.push ('f: autobridged_currency'); }}

this.getScanWithMarker (this, { Tisch: Tisch, startRow: startRow, stopRow: bisZei, Marker: options.marker, Grenze: options.limit, absteigend: absteigend, Spalten : Spalten, Filterstring: options.filterstring}, Funktion (err bzw.) {

if (!resp) { 
    resp = {rows: []}; 
} 

if (!resp.rows) { 
    resp.rows = []; 
} 

if (options.reduce && options.unreduced) { 
    if (descending) { 
    resp.rows.reverse(); 
    } 

    resp.reduced = reduce(resp.rows); 
} else if (table === 'exchanges') { 
    resp.rows = formatExchanges(resp.rows); 
} else { 
    resp.rows = formatAggregates(resp.rows); 
} 

callback(err, resp); }); 

/** * formatExchanges */

formatExchanges Funktion (Zeilen) { rows.forEach (function (row) { var key = row.rowkey.split ('|');

delete row.base_issuer; 
    delete row.base_currency; 
    delete row.counter_issuer; 
    delete row.counter_currency; 

    row.base_amount = parseFloat(row.base_amount); 
    row.counter_amount = parseFloat(row.counter_amount); 
    row.rate   = parseFloat(row.rate); 
    row.offer_sequence = Number(row.offer_sequence || 0); 
    row.ledger_index = Number(row.ledger_index); 
    row.tx_index  = Number(key[6]); 
    row.node_index  = Number(key[7]); 
    row.time   = utils.unformatTime(key[4]).unix(); 
}); 

if (options.invert) { 
    rows = invertPair(rows); 
} 

return rows; } 

/** * * formatAggregates/

formatAggregates Funktion (Zeilen) { rows.forEach (function (row) { var key = row.rowkey.split ('| ‚); row.base_volume = parseFloat (row.base_volume), row.counter_volume = parseFloat (row.counter_volume), row.buy_volume = parseFloat (row.buy_volume), row.count = Number (row.count) ; ro w.open = parseFloat (row.open); row.high = parseFloat (row.high); row.low = parseFloat (row.low); row.close = parseFloat (row.close); row.vwap = parseFloat (row.vwap); row.close_time = Nummer (row.close_time); row.open_time = Nummer (row.open_time); });

if (options.invert) { 
    rows = invertPair(rows); 
} 

return rows; } 

/** *, wenn die Basis/Zähler-Taste invertiert wurde, wir * einige der Werte in den Ergebnissen */

Funktion invertPair (Zeilen) tauschen müssen { var Wechsel; var i;

if (options.unreduced) { 

    for (i=0; i<rows.length; i++) { 
    rows[i].rate = 1/rows[i].rate; 

    //swap base and counter vol 
    swap = rows[i].base_amount; 
    rows[i].base_amount = rows[i].counter_amount; 
    rows[i].counter_amount = swap; 

    //swap buyer and seller 
    swap = rows[i].buyer; 
    rows[i].buyer = rows[i].seller; 
    rows[i].seller = swap; 
    } 

} else { 

    for (i=0; i<rows.length; i++) { 

    //swap base and counter vol 
    swap = rows[i].base_volume; 
    rows[i].base_volume = rows[i].counter_volume; 
    rows[i].counter_volume = swap; 

    //swap high and low 
    swap = 1/rows[i].high; 
    rows[i].high = 1/rows[i].low; 
    rows[i].low = swap; 

    //invert open, close, vwap 
    rows[i].open = 1/rows[i].open; 
    rows[i].close = 1/rows[i].close; 
    rows[i].vwap = 1/rows[i].vwap; 

    //invert buy_volume 
    rows[i].buy_volume /= rows[i].vwap; 
    } 
} 

return rows; } 

/** * * reduzieren reduzieren alle Zeilen */

Funktion reduzieren (Zeilen) {

var buyVolume = 0; 
var reduced = { 
    open: 0, 
    high: 0, 
    low: Infinity, 
    close: 0, 
    base_volume: 0, 
    counter_volume: 0, 
    buy_volume: 0, 
    count: 0, 
    open_time: 0, 
    close_time: 0 
}; 

rows = formatExchanges(rows); 
// filter out small XRP amounts 

rows = Zeilen. Filter (Funktion (Zeile) { if (options.base.currency === 'XRP' & & Zeile.base_amount < 0,0005) { Rückgabe false; } sonst if (options.counter.currency === 'XRP' & & row.counter_amount < 0,0005) { Rückgabe false; } sonst { Rückkehr wahr; } });

if (rows.length) { 
    reduced.open_time = moment.unix(rows[0].time).utc().format(); 
    reduced.close_time = moment.unix(rows[rows.length-1].time).utc().format(); 

    reduced.open = rows[0].rate; 
    reduced.close = rows[rows.length -1].rate; 
    reduced.count = rows.length; 

} else { 
    reduced.low = 0; 
    return reduced; 
} 

rows.forEach(function(row) { 
    reduced.base_volume += row.base_amount; 
    reduced.counter_volume += row.counter_amount; 

    if (row.rate < reduced.low) reduced.low = row.rate; 
    if (row.rate > reduced.high) reduced.high = row.rate; 

    if (row.buyer === row.taker) { 
    reduced.buy_volume += row.base_amount; 
    } 
}); 


reduced.vwap = reduced.counter_volume/reduced.base_volume; 
return reduced; } }; 
0

Vielleicht sollten Sie eine benutzerdefinierte websocket machen, die Ihren RPC Anruf Upgrade auf 1.1 HTTP-Protokoll (ws) zu machen.

In nodejs können Sie einfach

// for http 
var http = require('http'); 

// for websocket 
var ws = require("nodejs-websocket") 

var options = { 
    host: 'URL-RPC-HERE', 
    port: '80', 
    method: 'POST', 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': post_data.length 
    } 
}; 

var req = http.request(options, function(res) { 
    // after getting the response wich is the <res> 
    // we can upgrade it to ws 
    upToWebsocket(res); 
}); 

//Upgrade to websocket 
var upToWebsocket = function(json) { 
    var server = ws.createServer(function (conn) { 
    conn.on("json", function (str) { 
     conn.sendText(str.toUpperCase()+"!!!") 
    }) 

    conn.on("close", function (code, reason) { 
     console.log("Connection closed") 
    }) 
    }).listen(8001) 
} 

Und auch, wenn Sie auf einem Server Wellenförmig laufen haben dies nicht hilft, weil es keine RPC oder WS ist, die Exchange-API unterstützt.

Verwandte Themen