¿La forma más sencilla de obtener el tipo de cambio MtGox a través de una API?

Quiero hacer una aplicación simple que actualice cada minuto para decirme el tipo de cambio actual de Mtgox, pero tengo un problema al interpretar el JSON que devuelven algunas API:

  • El teletipo rápido de Mtgox devuelve este JSON . La pregunta es, ¿cuál es el valor que tengo que recuperar? Hay muchos y no los entiendo, y no encuentro los documentos adecuados.

  • La API de Bitcoincharts tiene el punto final de Markets Data , y devuelve el mercado que quiero bajo el símbolo "mtgoxUSD", sin embargo, me dice la fecha y hora de la última operación, la última compra/solicitud, pero no me dice el tipo de cambio de el último comercio .

¿Me estoy perdiendo de algo?

Creo que en el JSON, la entrada 'ahora' (línea final) es el tipo de cambio actual.
no puede ser, tiene este enorme valor: 1367714938558901
Lo siento, quise decir la línea después del identificador "último": la primera línea es last_local, la segunda es la última, etc.
Mmm, puede que tengas razón, pero he estado actualizando la página en intervalos de unos 10 segundos, ¡y el valor no cambia! Me pregunto si es porque no estoy usando una clave registrada.
Tengo la aplicación btcReport iOS que usa esa API y solo se actualiza una vez cada 60 segundos. Lo acabo de comprobar y coincide con el valor que tengo para el tipo de cambio en este momento.
ahora es la hora actual, al nano seg. precisión. (1367714938 - seg. desde 1970; 558 - micro seg.; 901 - nano seg.)

Respuestas (3)

JSON puede ser un poco difícil de leer porque generalmente está destinado a ser servido sin caracteres como espacios y saltos de línea que lo harían legible por humanos.

Aquí está la salida del teletipo rápido:

{
  "result":"success",
  "data":{
    "last_local":{
      "value":"136.87303",
      "value_int":"13687303",
      "display":"$136.87",
      "display_short":"$136.87",
      "currency":"USD"
    },
    "last":{
      "value":"136.87303",
      "value_int":"13687303",
      "display":"$136.87",
      "display_short":"$136.87",
      "currency":"USD"
    },
    "last_orig":{
      "value":"136.87303",
      "value_int":"13687303",
      "display":"$136.87",
      "display_short":"$136.87",
      "currency":"USD"
    },
    "last_all":{
      "value":"136.87303",
      "value_int":"13687303",
      "display":"$136.87",
      "display_short":"$136.87",
      "currency":"USD"
    },
    "buy":{
      "value":"136.10500",
      "value_int":"13610500",
      "display":"$136.11",
      "display_short":"$136.11",
      "currency":"USD"
    },
    "sell":{
      "value":"136.87250",
      "value_int":"13687250",
      "display":"$136.87",
      "display_short":"$136.87",
      "currency":"USD"
    },
    "now":"1381085718504609"
  }
}

Siempre se garantiza que el elemento "resultado" estará allí, pero, por supuesto, tiene un contenido variable en función de si la llamada fue exitosa o no. El elemento "datos" contiene una serie de precios, y cada nombre indica su precio.

La mayoría de los analizadores JSON en lenguajes interpretados como Ruby, PHP y Python analizan JSON en un hash o diccionario. Desearía el valor de la clave "valor" de la clave "última" de la clave "datos".

Aquí hay una versión de una sola línea en Ruby para el ticker v2:

ruby -e '%w(open-uri json).each{|b| require b}; open("http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast") {|d| puts JSON.parse(d.read)["data"]["last"]["value"]}'

O algo un poco más legible:

require "open-uri" 
require "json"

open("http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast") do |d| 
  json = JSON.parse(d.read)
  puts json["data"]["last"]["value"]
end

Aquí hay una versión de una sola línea en Ruby para el teletipo antiguo:

ruby -e '%w(open-uri json).each{|b| require b}; open("https://mtgox.com/api/1/BTCUSD/ticker") {|d| puts JSON.parse(d.read)["return"]["last"]["value"]}'

O algo un poco más legible:

require "open-uri" 
require "json"

open("https://mtgox.com/api/1/BTCUSD/ticker") do |d| 
  json = JSON.parse(d.read)
  puts json["return"]["last"]["value"]
end

Ok, esto debería responder a tu pregunta,

import urllib2, json

x = float(json.loads(urllib2.urlopen('https://mtgox.com/api/1/BTCUSD/ticker').read())['return']['last']['value'])

print x

Esto devuelve el último valor del precio de MTGox USD para bitcoins

Esta es una aplicación de teletipo de bitcoin que muestra el precio de bitcoin de MTGox con un pequeño retraso y se actualiza automáticamente. También es compatible con GBP, EUR y Yen. Este es el enlace a la entrada del blog http://bitkapp.com/blog/bitcoin-price-ticker/

La forma más sencilla de recibir el tipo de cambio de bitcoin sin una función de actualización automática se realiza mediante el siguiente script de python.

import json
import urllib2
from Tkinter import *

url='http://api.bitcoincharts.com/v1/markets.json'
req=urllib2.Request(url)
response=urllib2.urlopen(req).read()
output=json.loads(response)

mtusd_price = output[-10]['avg']
mteur_price = output[31]['avg']
mtgbp_price = output[44]['avg']

MTUSD= 'USD' + ' ' + str(mtusd_price)
MTEUR= 'EUR' + ' ' + str(mteur_price)
MTGBP = 'GBP' + ' ' + str(mtgbp_price)

root= Tk()
root.title("Bitcoin Price")
root.geometry("250x100")

USD = Label(root, text=MTUSD)
EUR = Label(root, text=MTEUR)
GBP = Label(root, text=MTGBP)
USD.pack()
EUR.pack()
GBP.pack()
mainloop()

Cuando ejecute este script, se abrirá una ventana que muestra el precio en ese instante en USD, EUR y GBP.

Lo siento por la publicación anterior, ya que obviamente no fue lo suficientemente claro.

WTF! ¡Esto no solo usa el precio promedio (en lugar del último comercio), sino que también usa números para ubicar los elementos en el json! el código más horrible que he visto en mucho tiempo, downvoting
Supongo que podría definir una función que busque la salida json. No odies, aunque hombre, soy nuevo en todo esto de la programación. ¿Has echado un vistazo a la aplicación ticker?