Отображение цены в BTC по курсу доллара США

Это довольно классический вопрос программирования, но я думаю, что он очень распространен в биткойн-сообществе, и было бы полезно иметь общедоступный код.

Я предпочитаю php-скрипт.


Bitpay публикует курсы обмена здесь: https://bitpay.com/api/rates .

Если товар стоит 10 долларов США, как мне сделать следующее?

1) извлечь обменный курс BTC/USD из массива по этому URL-адресу
2) Определить цену, а затем разделить на обменный курс
3) Отобразить цену BTC на HTML-странице?

Ответы (9)

Сохраните код в файл PHP в веб-каталоге:

<?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>
У меня это не сработало, вместо этого просто выводилось «Цена $/BTC». Я не очень хорошо знаю PHP, но некоторые поисковые запросы привели меня к тому, что я заменил последние три строки на: <?php echo "<ul> <li> Цена: $usd_price $ / $bitcoin_price BTC </ul>"; ?> (изображение слона не было бы таким плохим, если бы оно было менее массивным)
Включите «показывать ошибки» для php и посмотрите, что не так. php.net/manual/ru/errorfunc.configuration.php

Может быть полезен пример 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"]) %>

Или одна командная строка:

# /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"]);'

Вот пример, который извлекает текущие текущие значения из потока json в mtgox (текущее, низкое, среднее, последнее и текущее). Он написан на питоне, но его очень легко перенести на язык по вашему выбору.

#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

Поскольку Mt.Gox не работает, а рынок разделен, я бы предложил использовать API blockchain.info . Я считаю, что они объединяют различные текущие рыночные цены, чтобы получить одну среднюю цену. Это намного надежнее, чем доверять только одному рынку (посмотрите, что случилось с Mt. Gox). Кроме того , blockchain.info в целом пользуется доверием.

Для загрузки информации в PHP используйте функции file_get_contents()и json_decode(). Большинство этих функций доступны в других высокопроизводительных языках программирования.

Я старше, может быть, несколько мудрее, отвечая на свой вопрос:

Вот немного PHP, чтобы получить обменный курс.

<?php

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

?>

В конце концов я обнаружил, что это проще всего сделать в javascript, так как вы также захотите отобразить цену.

Везде, где у вас есть элемент с `class="price", это добавит эквивалент mBTC рядом с ним. Настройте по своему вкусу.

$(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)");
    }); 
  });
});

Вот bashкоманда, которая получает спотовую цену от Coinbase API (TM). Он направляет ответ в jq, который анализирует его и выводит значения, указанные в переданном ему фильтре. -rудаляет кавычки из своего вывода, который передается в sed. sedобрабатывает первые 4 цифры этого вывода, вставляя запятую тысяч и знак доллара. Обратите внимание, что он работает только для 4-значных чисел (поэтому его нужно будет изменить в ближайшее время, заменив «1» на «2» ;-) Перенаправление вывода 2>/dev/nullскрывает curl cursesинтерфейс:

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'

Эй, я знаю, что этой ветке 3 года, но в любом случае я использовал часть кода на этой странице, чтобы сделать свой скрипт, потому что я не мог заставить этот код работать...

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']

Надеюсь, это поможет будущим посетителям.

Поскольку Bitpay делает некоторые обновления, этот код позволяет вам уже настроить

<?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?>

Я отредактировал код из первого ответа, и этот работает хорошо