Websocket 接続を機能させることができ、 と からデータを受信していping_block
ますblocks_sub
。blockchain.info
ただし、現在の日付との apiから受信したブロック日付の差を計算するのは困難です。最新のブロックからの経過時間を計算するためのコードを手伝ってくれる人はいますか?
また、innerHTML オブジェクトを更新するために接続を開いたままにするにはどうすればよいですか?
アドバイスをいただければ幸いです。ありがとう。
<script language="javascript" type="text/javascript">
var wsUri = "wss://ws.blockchain.info/inv";
var output;
function init()
{
output = document.getElementById("output");
initWebSocket();
}
function initWebSocket()
{
// init blockchain websocket (activity, blocks)
var blockchain = new WebSocket('wss://ws.blockchain.info/inv');
blockchain.onerror = function (error){ console.log('connection.onerror',error); };
blockchain.onopen = function ()
{
writeToScreen("Connection to blockchain.info succesful.");
blockchain.send( JSON.stringify( {"op":"ping_block"} ) );
blockchain.send( JSON.stringify( {"op":"blocks_sub"} ) ); // subscribe to new blocks
};
blockchain.onmessage = function (message)
{
var response = JSON.parse(message.data);
var date = new Date(0);
date.setUTCSeconds( response.x.time );
if( response.op == "utx")
{
var amount = 0;
for(var i=0;i<response.x.out.length;i++)
amount += response.x.out[i].value;
// amount is in satoshi
// 1 BTC = 100,000,000 Satoshi
([url='https://en.bitcoin.it/wiki/activity)']https://en.bitcoin.it/wiki/activity)[/url]
response.amount = amount / 100000000;
response.type = TYPE_TRANSACTION;
response.index = index++;
response.date = date;
}
else if( response.op == "block" )
{
response.type = TYPE_BLOCK;
response.date = date;
}
if( DEBUG )
console.log( response.op, response );
response.date = date;
writeToScreen('<span style="color: blue;">Most recent block found
on: </span>' + response.date);
};
}
function writeToScreen(message)
{
var pre = document.createElement("p");
pre.innerHTML = message;
output.appendChild(pre);
}
// constants
var TYPE_TRANSACTION = "transaction";
var TYPE_TRADE = "trade";
var TYPE_BLOCK = "block";
var MINUTE = 1000*60;
var HOUR = MINUTE*60;
var MIN_MINUTES = 1;
var MAX_MINUTES = 10;
var DEBUG = true;
var activity = [];
var index = 0;
window.addEventListener("load", init, false);