2016-08-09 7 views

答えて

0

ソケットで "tx_history"コマンドを使用すると同じですが、jsonの結果が特定のデータ結果と等しくないことを伝えて申し訳ありません。

リップルデータapiv2がajaxによって再生されています。

} 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 
    }); 
} } 

、それは、GET URLによってのみアクセスすることができる:交換のためリップル結果JSONフォーマッタを参照

経路:「/ V2 /交換/ {ベース} /そこserver.jsに結合されている:{カウンタ}」

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

と最後のヒントこれはHBaseのを使用してデータベースクエリです:

HbaseClient.getExchanges =機能(オプション、コールバック){
VARベース= options.base.currency + '|' +(options.base.issuer || ''); var counter = options.counter.currency + '|' +(options.counter.issuer || ''); varテーブル。 var keyBase; var startRow; var endRow;

var降順;

var columns;

if(counter.toLowerCase()> base.toLowerCase()){ keyBase = base + '|' +カウンター;

} else { keyBase = counter + '|' +ベース; options.invert = true; }

if(!options.interval){ table = 'exchanges'; 降順= options.descending?正誤; 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' 
    ]; 
} 

}場合(exchangeIntervals.indexOf(options.interval)== -1!){ keyBase = options.interval + '|' + keyBase; 降順= options.descending?正誤; table = 'agg_exchanges';

} else { コールバック( '無効な間隔:' + options.interval); リターン; }

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

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

this.getScanWithMarker(この、{ テーブル:テーブル、 startRow属性:startRow属性、 stopRow:とendRow、 マーカー:options.marker、 限界:options.limit、 下降:下降、 列:カラム、 filterString:options.filterstring}、関数(ERR、RESP){

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 */

function formatExchanges(rows){ 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(行){ rows.forEach(関数(行){ VARキー= 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 =番号(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 =数値(row.close_time); row.open_time = Number(row.open_time); });

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

return rows; } 

/** *ベース/カウンタキーが反転している場合、我々は交換する必要がある*結果の値の一部*/

関数invertPair(行){ VARスワップ; 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; } 

/** *すべての行を減らす*減らす*/

関数(行){

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 

行=行を減らします。フィルタ(機能(行){ if(options.base.currency === 'XRP' & &行。base_amount < 0.0005){ return false; } else if(options.counter.currency === 'XRP' & & row.counter_amount < 0.0005){ falseを返します。 } else { がtrueを返します。 } });

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

たぶん、あなたは1.1 httpプロトコル(WS)にごRPCコールのアップグレードを行うカスタム用WebSocketを行う必要があります。 nodejs

することができます単に

// 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) 
} 

そして、あなたは、サーバー上で実行されている波打つしている場合は交換APIをサポートしています何のRPCやWSがありませんので、また、これは役立ちません。

関連する問題