diff options
| author | tv <tv@nomic.retiolum> | 2013-11-07 13:07:25 +0100 | 
|---|---|---|
| committer | tv <tv@nomic.retiolum> | 2013-11-07 13:07:25 +0100 | 
| commit | 03d7962c7346cb5aa09466c763a2010d89eb7d45 (patch) | |
| tree | cf0feaf3a6d8fb077ba5672aaeeb58ef14a980ff /gold | |
| parent | ea8a9e3f3637eb2cd6f1781afe20d9f0c4090fed (diff) | |
bitcoinwisdom ticker: initial commit
Diffstat (limited to 'gold')
| -rw-r--r-- | gold/bitcoinwisdom/beep.js | 30 | ||||
| -rw-r--r-- | gold/bitcoinwisdom/index.js | 84 | ||||
| -rw-r--r-- | gold/bitcoinwisdom/ticker.js | 84 | 
3 files changed, 198 insertions, 0 deletions
diff --git a/gold/bitcoinwisdom/beep.js b/gold/bitcoinwisdom/beep.js new file mode 100644 index 00000000..80a0cb0f --- /dev/null +++ b/gold/bitcoinwisdom/beep.js @@ -0,0 +1,30 @@ +module.exports = { +  create_beeper: create_beeper, +} + +var child_process = require('child_process'); + +function create_beeper (spec) { +  return { +    beep: beep, +  } +  function beep (freq, len) { +    var child = child_process.spawn('beep', [ +        '-f', freq, +        '-l', len, +    ]); +    child.stdout.on('data', function (data) { +      console.log('stdout: ' + data); +    }); + +    child.stderr.on('data', function (data) { +      console.log('stderr: ' + data); +    }); + +    child.on('close', function (code) { +      if (code !== 0) { +        console.log('child process exited with code ' + code); +      } +    }); +  } +} diff --git a/gold/bitcoinwisdom/index.js b/gold/bitcoinwisdom/index.js new file mode 100644 index 00000000..95861229 --- /dev/null +++ b/gold/bitcoinwisdom/index.js @@ -0,0 +1,84 @@ +var http = require('http'); +var beeper = require('./beep.js').create_beeper(); + +setInterval(get_ticker, 1000); + +function get_ticker () { +  http.get('http://s1.bitcoinwisdom.com:8080/ticker', ticker_response_handler); +} + +function ticker_response_handler (res) { +  var data = ''; +  res.on('data', function (chunk) { +    data += chunk; +  }); +  res.on('end', function () { +    try { +      data = JSON.parse(data); +    } catch (err) { +      return console.log('Error:', err); +    } +    ticker_data_handler(data); +  }); +} + +var last_data = { +  btceltcbtc: { +    last: 0, // price +    date: 0, +    tid: 0, +  }, +} + +function ticker_data_handler (data) { +  //console.log(data) + +  var ticker = data.btceltcbtc +  var last_ticker = last_data.btceltcbtc + +  if (ticker.date !== last_ticker.date) { + +    var diff = ticker.last - last_ticker.last; + +    var lag = data.now - ticker.date; + +    freq = (2000 + 1000000 * diff) | 0; + +    var out = [ +      format_date(data.now) + '+' + pad_left(lag, 2, '0'), +      'btceltcbtc', +      '[' + diff_color(diff) + 'm' + ticker.last + '[m', +      lag, +      freq, +    ]; + +    console.log(out.join(' ')); + +    beeper.beep(freq, 10); +  } + +  last_data.btceltcbtc = data.btceltcbtc; +} + +function diff_color (diff) { +  if (diff < 0) { +    return '31;1'; +  } else if (diff > 0) { +    return '32;1'; +  } else { +    return '33;1'; +  } +} + +function format_date (unix) { +  return (new Date(unix * 1000)).toISOString() +    .replace(/\.000Z$/, 'Z') +} + +function pad_left (obj, num, char) { +  var str = obj.toString(); +  while (str.length < num) { +    str += char; +  } +  return str; +} diff --git a/gold/bitcoinwisdom/ticker.js b/gold/bitcoinwisdom/ticker.js new file mode 100644 index 00000000..95861229 --- /dev/null +++ b/gold/bitcoinwisdom/ticker.js @@ -0,0 +1,84 @@ +var http = require('http'); +var beeper = require('./beep.js').create_beeper(); + +setInterval(get_ticker, 1000); + +function get_ticker () { +  http.get('http://s1.bitcoinwisdom.com:8080/ticker', ticker_response_handler); +} + +function ticker_response_handler (res) { +  var data = ''; +  res.on('data', function (chunk) { +    data += chunk; +  }); +  res.on('end', function () { +    try { +      data = JSON.parse(data); +    } catch (err) { +      return console.log('Error:', err); +    } +    ticker_data_handler(data); +  }); +} + +var last_data = { +  btceltcbtc: { +    last: 0, // price +    date: 0, +    tid: 0, +  }, +} + +function ticker_data_handler (data) { +  //console.log(data) + +  var ticker = data.btceltcbtc +  var last_ticker = last_data.btceltcbtc + +  if (ticker.date !== last_ticker.date) { + +    var diff = ticker.last - last_ticker.last; + +    var lag = data.now - ticker.date; + +    freq = (2000 + 1000000 * diff) | 0; + +    var out = [ +      format_date(data.now) + '+' + pad_left(lag, 2, '0'), +      'btceltcbtc', +      '[' + diff_color(diff) + 'm' + ticker.last + '[m', +      lag, +      freq, +    ]; + +    console.log(out.join(' ')); + +    beeper.beep(freq, 10); +  } + +  last_data.btceltcbtc = data.btceltcbtc; +} + +function diff_color (diff) { +  if (diff < 0) { +    return '31;1'; +  } else if (diff > 0) { +    return '32;1'; +  } else { +    return '33;1'; +  } +} + +function format_date (unix) { +  return (new Date(unix * 1000)).toISOString() +    .replace(/\.000Z$/, 'Z') +} + +function pad_left (obj, num, char) { +  var str = obj.toString(); +  while (str.length < num) { +    str += char; +  } +  return str; +}  | 
