The following code block gets you bitcoin's price by sampling from 5 sources and taking the median.
Usage:
(async()=>{
var btc_price = await getBitcoinPrice();
console.log( 'btc price:', btc_price );
})();
Code:
var getBitcoinPrice = async () => {
var returnDataOrTimeout = async ( url, time ) => {
var data = await fetch( url );
var timeout = new Promise( resolve => setTimeout( resolve, time, "timed out" ) );
var result = Promise.any( [ data, timeout ] );
return result;
}
var getBitcoinPriceFromCoinbase = async () => {
try {
var data = await returnDataOrTimeout( "https://api.coinbase.com/v2/prices/BTC-USD/spot", 5000 );
var json = await data.json();
var price = json[ "data" ][ "amount" ];
return price;
} catch ( e ) {
return 0;
}
}
var getBitcoinPriceFromKraken = async () => {
try {
var data = await returnDataOrTimeout( "https://api.kraken.com/0/public/Ticker?pair=XBTUSD", 5000 );
var json = await data.json();
var price = json[ "result" ][ "XXBTZUSD" ][ "a" ][ 0 ];
return price;
} catch ( e ) {
return 0;
}
}
async function getBitcoinPriceFromBlockchain() {
try {
var data = await returnDataOrTimeout( "https://blockchain.info/ticker", 5000 );
var json = await data.json();
var price = json[ "USD" ][ "sell" ];
return price;
} catch ( e ) {
return 0;
}
}
var getBitcoinPriceFromGemini = async () => {
try {
var data = await returnDataOrTimeout( "https://api.gemini.com/v2/ticker/BTCUSD", 5000 );
var json = await data.json();
var price = json[ "bid" ];
return price;
} catch ( e ) {
return 0;
}
}
var getBitcoinPriceFromCoinGecko = async () => {
try {
var data = await returnDataOrTimeout( "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd&precision=2", 5000 );
var json = await data.json();
var price = json[ "bitcoin" ][ "usd" ];
return price;
} catch ( e ) {
return 0;
}
}
var prices = [];
var cbprice = await getBitcoinPriceFromCoinbase();
var kprice = await getBitcoinPriceFromKraken();
var cdprice = await getBitcoinPriceFromBlockchain();
var gprice = await getBitcoinPriceFromGemini();
var cgprice = await getBitcoinPriceFromCoinGecko();
prices.push( Number( cbprice ), Number( kprice ), Number( cdprice ), Number( gprice ), Number( cgprice ) );
//console.log( prices );
prices.sort();
return prices[ 2 ];
}