アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Node.jsJavaScript仮想通貨
【Node.js】ビットコイン(BTC)およびイーサリアム(ETH)の日本円(JPY)レートを取得する
POSTED BY
2023-01-13

BitFlyerのAPIが公開されているのでRESTで取得する。以下サンプルソース

JavaScriptget_coin_jpy_rate.jsGitHub Source
async function main() {

const HTTPS = require('https');

function promiseRequest(url, options, postData) {
return new Promise(function (resolve, reject) {

  var req = HTTPS.request(url, options, (res) => {
    //console.log('statusCode:', res.statusCode);
    //console.log('headers:', res.headers);

    //200台以外はエラーとする場合
    //if(res.statusCode >= 300) {
    //  reject(new Error('res.statusCode >= 300'));
    //}

    var chunks = []; //チャンクレスポンスストック配列

    res.on('data', chunk => chunks.push(Buffer.from(chunk)))
    .on('end', () => { //チャンクレスポンスストリーム終了
      var buffer = Buffer.concat(chunks);
      resolve(buffer);
    });
  });

  req.on('error', (err) => {
    reject(err);
  });

  req.on('timeout', () => {
    req.abort();
    reject(new Error('request timed out'));
  });

  if(postData != null) {
    req.write(postData);
  }

  req.end();

});
}

async function get_coin_jpy_rate(code) {

  var url = 'https://api.bitflyer.jp/v1/ticker?product_code=' + code;
  console.log(url);
  var json = null;
  var options = {
    method: 'GET',
    timeout: 5000,
    //headers: {
      //'Content-Type': 'application/json',
    //},
  };

  //var postData = JSON.stringify({
  //  'limit' : 50
  //});
  var postData = null;

  try {
    json = await promiseRequest(url, options, postData);
    json = JSON.parse(json);
  }
  catch(err) {
    console.log(err.stack);
    json = null;
  }

  console.log(json);
  //console.log(json.ltp);

  return json != null ? json.ltp:0;
}

var coins = 1;

var coins_jpy = Math.floor(await get_coin_jpy_rate('BTC_JPY')) * coins;
console.log(coins + ' BTC は ' + coins_jpy + ' 円 です。');

coins_jpy = Math.floor(await get_coin_jpy_rate('ETH_JPY')) * coins;
console.log(coins + ' ETH は ' + coins_jpy + ' 円 です。');

} //async function main()

main();

実行結果

node get_coin_jpy_rate.js

https://api.bitflyer.jp/v1/ticker?product_code=BTC_JPY
{
  product_code: 'BTC_JPY',
  state: 'RUNNING',
  timestamp: '2023-01-13T13:49:21.82',
  tick_id: 1739827,
  best_bid: 2425040,
  best_ask: 2425081,
  best_bid_size: 0.0208,
  best_ask_size: 0.196,
  total_bid_depth: 494.19401556,
  total_ask_depth: 203.58607963,
  market_bid_size: 0,
  market_ask_size: 0,
  ltp: 2425389,
  volume: 10285.41380451,
  volume_by_product: 1590.62180054
}
1 BTC は 2425389 円 です。
https://api.bitflyer.jp/v1/ticker?product_code=ETH_JPY
{
  product_code: 'ETH_JPY',
  state: 'RUNNING',
  timestamp: '2023-01-13T13:49:22.09',
  tick_id: 2130483,
  best_bid: 180542,
  best_ask: 180675,
  best_bid_size: 0.0853071,
  best_ask_size: 0.2,
  total_bid_depth: 4040.6103645,
  total_ask_depth: 1699.8850064,
  market_bid_size: 0,
  market_ask_size: 0,
  ltp: 180542,
  volume: 7073.1963903,
  volume_by_product: 7073.1963903
}
1 ETH は 180542 円 です。

Promiseを使ってhttpsリクエスト&レスポンスのチャンクデータを同期的に(待って)取得している。
返却JSONのltpが1仮想通貨あたりの日本円レートなので、小数点以下を切って表示している。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】