Mostrar precio en BTC basado en el tipo de cambio USD

Esta es una pregunta de programación bastante clásica, pero creo que es muy común para la comunidad de Bitcoin y sería útil tener el código disponible públicamente.

Mi preferencia es por un script php.


Bitpay publica sus tipos de cambio aquí: https://bitpay.com/api/rates

Si un artículo cuesta $ 10 USD, ¿cómo haría lo siguiente?

1) extraiga el tipo de cambio BTC/USD de la matriz en esta URL
2) Defina el precio, luego divida por el tipo de cambio
3) ¿Mostrar el precio BTC en una página HTML?

Respuestas (9)

Guarde el código en un archivo PHP en el directorio web:

<?php  
  $url = "https://bitpay.com/api/rates";

  $json = file_get_contents($url);
  $data = json_decode($json, TRUE);

  $rate = $data[2]["rate"];   //$data[1] is outdated now, they have updated their json order. This new number 2 now fetches USD price. 
  $usd_price = 10;     # Let cost of elephant be 10$
  $bitcoin_price = round( $usd_price / $rate , 8 );
?>

<ul>
   <li>Price: <?=$usd_price ?> $ / <?=$bitcoin_price ?> BTC
</ul>
Esto no funcionó para mí, en lugar de eso, simplemente mostró "Precio $/BTC". No conozco bien PHP, pero algunas búsquedas en Google me llevaron a reemplazar las últimas tres líneas con: <?php echo "<ul> <li> Precio: $usd_price $ / $bitcoin_price BTC </ul>"; ?> (la imagen del elefante no sería tan mala si fuera menos masiva)
Habilite "mostrar errores" para php y mire lo que está mal. php.net/manual/ru/errorfunc.configuration.php

Puede ser un ejemplo útil de psp (python):

<%psp
import urllib2;     
import simplejson as json;     
j = json.loads(urllib2.urlopen("https://data.mtgox.com/api/2/BTCUSD/money/ticker").read());     
%>

<%=str(j["data"]["last"]["value"]) %>

O una línea de comando:

# /usr/bin/python -c 'import urllib2; import simplejson as json; j = json.loads(urllib2.urlopen("https://data.mtgox.com/api/2/BTCUSD/money/ticker").read()); print str(j["data"]["last"]["value"]);'

Aquí hay un ejemplo que recupera los valores actuales actuales de la secuencia json en mtgox (actual, bajo, promedio, último y ahora). Está escrito en python, pero debería ser muy fácil trasladarlo al idioma de su elección.

#https://github.com/spudstud/alfred-bitcoin-workflow

     #json is the standard python json parser
     #urllib2 is a webpage fetching library
import json     
import urllib2  

#The url that provides the raw json stream
url="http://data.mtgox.com/api/2/BTCUSD/money/ticker"

#Open the url and turn it into an string containing the json
jsonURL=urllib2.urlopen(url)

#Convert the json text into a json object
jsonObject=json.load(jsonURL)

#Parse the desired values out of the json object
currentValue    = jsonObject['data']['high']['display']
lowValue        = jsonObject['data']['low']['display']
avgValue        = jsonObject['data']['avg']['display']
lastValue       = jsonObject['data']['last']['display']
nowValue        = jsonObject['data']['now']

#Sometimes your json is not a string,you will need to use json.load, not json.loads:

print jsonObject
print currentValue
print lowValue
print avgValue
print lastValue
print nowValue

Dado que Mt. Gox está caído y el mercado está dividido, sugeriría usar la API de blockchain.info . Creo que combinan diferentes precios de mercado actuales para hacer un precio promedio. Esto es mucho más confiable que confiar en un solo mercado (vea lo que pasó con Mt. Gox). Además , blockchain.info es un sitio generalmente confiable.

Para cargar la información en PHP usa las funciones file_get_contents()y json_decode(). La mayoría de estas funciones están disponibles en otros lenguajes de programación de alta gama.

Un yo mayor, tal vez algo más sabio, respondiendo a mi propia pregunta:

Aquí hay algunos PHP para obtener el tipo de cambio.

<?php

$page = file_get_contents('https://bitpay.com/api/rates');
$my_array = json_decode($page, true);
$exchange_rate = $my_array[0]["rate"];      

?>

Eventualmente encontré que era más fácil hacerlo en javascript, ya que también querrás mostrar el precio.

En cualquier lugar donde tenga un elemento con `class="price", esto agregará el equivalente de mBTC junto a él. Ajusta a tu gusto.

$(document).ready(function(){
  $.getJSON('https://bitpay.com/api/rates', function(data){
    var rate = data[0].rate;

    $(".price").each(function(i){
      var tex = $(this).text();
      var usdPrice = Number(tex.replace(/[^0-9.-]+/g,"")); 
      var mbtcPrice = 1000*usdPrice/rate;
      $(this).append("(&nbsp;~" + String(mbtcPrice.toFixed(0))+ "&nbsp;mBTC)");
    }); 
  });
});

Aquí hay un bashcomando que obtiene el precio al contado de Coinbase API (TM). Canaliza la respuesta a jq, que la analiza y genera los valores especificados en el filtro que se le pasó. -relimina las comillas de su salida, que se pasa a sed. sedprocesa los primeros 4 dígitos de esta salida, insertando una coma de miles y un signo de dólar. Tenga en cuenta que solo funciona para números de 4 dígitos (por lo que deberá modificarse en breve, reemplazando el '1' con un '2' ;-) La redirección de salida 2>/dev/nulloculta la curl cursesinterfaz:

curl --insecure https://coinbase.com/api/v1/prices/spot_rate 2>/dev/null | jq -r '.["amount"]' | sed 's/\([[:digit:]]\{1\}\)\([[:digit:]]\{3\}\)/\$\1,\2/g'

Oye, sé que este hilo tiene 3 años, pero de todos modos usé parte del código en esta página para hacer mi script porque no pude hacer que el código funcionara aquí...

import json
import urllib2

url="http://api.coindesk.com/v1/bpi/currentprice/EUR.json"

jsonURL=urllib2.urlopen(url)

jsonObject=json.load(jsonURL)

print jsonObject['bpi']['USD']['code']
print jsonObject['bpi']['USD']['rate']

Espero que esto ayude a los futuros visitantes.

Como bitpay realiza alguna actualización, este código le permite estar ya configurado

<?php $url = "https://bitpay.com/api/rates";
$json = file_get_contents($url);
  $data = json_decode($json, TRUE);
for ($i=1; $i <20 ; $i++) { 
    if($data[$i]["code"]=="USD")
        $rate = $data[$i]["rate"];
}
    $usd_price = 10;     # Let cost of elephant be 10$
  $bitcoin_price = round( $usd_price / $rate , 8 );?>                        
  <ul>  <li>Price: <?=$usd_price ?> $ / <?=$bitcoin_price ?> BTC</ul>
<?php
$url = "https://bitpay.com/api/rates";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
$rate = $data[0]["rate"];
$rate1 = $data[1]["rate"];
$rate2 = $data[2]["rate"];
$rate145 = $data[145]["rate"];
?>
BTC/USD: <?=$rate?>
<br>
BTC/EURO: <?=$rate1?>
<br>
BTC/GBP: <?=$rate2?>
<br>
BTC/VND : <?=$rate145?>

Edité el código de la primera respuesta y este funciona bien