Skip to content

Instantly share code, notes, and snippets.

@supertestnet
Last active March 27, 2025 20:08
Show Gist options
  • Save supertestnet/b96c3cc38f3080aced4ccd68e94775bc to your computer and use it in GitHub Desktop.
Save supertestnet/b96c3cc38f3080aced4ccd68e94775bc to your computer and use it in GitHub Desktop.
Get Median Bitcoin Price

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 ];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment