Это довольно классический вопрос программирования, но я думаю, что он очень распространен в биткойн-сообществе, и было бы полезно иметь общедоступный код.
Я предпочитаю php-скрипт.
Bitpay публикует курсы обмена здесь: https://bitpay.com/api/rates .
Если товар стоит 10 долларов США, как мне сделать следующее?
1) извлечь обменный курс BTC/USD из массива по этому URL-адресу
2) Определить цену, а затем разделить на обменный курс
3) Отобразить цену BTC на HTML-странице?
Сохраните код в файл 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>
Может быть полезен пример 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("( ~" + String(mbtcPrice.toFixed(0))+ " 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?>
Я отредактировал код из первого ответа, и этот работает хорошо
мардлин
пользователь6203