Bitcoin Forum

Local => Español (Spanish) => Topic started by: izzukay on March 29, 2013, 04:38:38 PM



Title: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 29, 2013, 04:38:38 PM
Hola a todos y saludos desde España. Soy nuevo en el foro aunque llevo siguiéndolo desde finales del 2012... Y estoy como loco por aplicar los bitcoins a diversos proyectos en los que estoy trabajando (hay taaanto por hacer).

En lo referente a programación web, hace poco sentí la necesidad de contar con funciones JavaScript que permitiesen convertir cualquier cantidad de bitcoins en su equivalente en unidades de una divisa específica (o en céntimos de la divisa), a partir de la cotización del BTC en ese momento (y viceversa, convertir de una divisa, o céntimos de la misma, a BTCs). También necesitaba poder trabajar con satoshis, además de bitcoins.

Como no encontré nada al respecto me hice mi propia colección de funciones, así que la dejo aquí por si a alguien más le puede ser de utilidad:

http://bitbin.it/3Z87ThaN


Ojalá a alguien le sirva.
¡¡Saludos!!  ;)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: xacobe97 on March 30, 2013, 02:16:18 PM
Felicidades  :) me han servido para inspirarme esas funciones, lo único que faltaría es parsear el valor de los BTC automáticamente de algún sitio, por ejemplo btc-e. Por el resto está muy bien. Saludos.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on March 30, 2013, 02:39:37 PM
Bienvenido!

Siempre esta bien introducirse con una contribución.

Tengo alguna pregunta y sugerencias para tu código, si las aceptas ;)

Saludos


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 30, 2013, 07:28:56 PM
Felicidades  :) me han servido para inspirarme esas funciones, lo único que faltaría es parsear el valor de los BTC automáticamente de algún sitio, por ejemplo btc-e. Por el resto está muy bien. Saludos.

Gracias xacobe97. No hay nada como saber que tu trabajo resulta útil a otras personas. En efecto, falta lo que dices. Tengo apuntadas unas APIs por ahí que creo que podrían solucionar esa parte (quizás la de Blockchain.info, pero aún no estoy seguro porque las miré de pasada). Lo voy a investigar en breve, así que cuando dé con la tecla lo comentaré aquí.

Bienvenido!

Siempre esta bien introducirse con una contribución.

Tengo alguna pregunta y sugerencias para tu código, si las aceptas ;)

Saludos

Hola Ogig, y gracias por la bienvenida. Por supuesto, sugiere y pregúntame cuanto quieras.

Por cierto, hoy he hecho una nueva versión. En unos minutos la publicaré aquí.

Hasta ahora.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 30, 2013, 07:55:05 PM
Bien, aquí dejo la nueva versión del código:

http://bitbin.it/eORmuOgr


La novedad es que he incorporado funciones para trabajar también con milibitcoins (mBTC) y microbitcoins (uBTC), que están a la orden del día.

A ver si se ve sin problemas porque Bitbin parece estar haciendo cosas raras hoy.

¡¡Saludos!!  ;)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on March 30, 2013, 08:12:24 PM
[...]

Hola Ogig, y gracias por la bienvenida. Por supuesto, sugiere y pregúntame cuanto quieras.

Por cierto, hoy he hecho una nueva versión. En unos minutos la publicaré aquí.

Hasta ahora.

Primero la pregunta: ¿Para qué necesitas el tfxp? ¿El toFixed y sus e21 deberían llegar, no?

Y sugerencias:

Usa siempre el comparador === en lugar de ==, te ahorraras bugs difíciles de encontrar por la coerción de tipos. Lo mismo con !=, es mejor usar !==

Usa algún patrón para construir tu código de manera reusable. Yo para tu pequeña librería usaría el patrón de módulo. Básicamente todo tu código iría dentro de una función anónima que se ejecute a si misma exportando solo una variable, algo como:

Code:
(function (){
//Aquí tu código
    BtcConv = {} //Sin usar var para declararlo en el scope global
    BtcConv.btc2crr = function () {
          //tus funciones
    }   
}())

En el código expones un objeto solamente al scope global, por ejemplo. BtcConv, y el resto son métodos asociados. Así es como jquery, underscore y muchas librerías son escritas. Sirve para no intoxicar el namespace global de variables. Por este mismo motivo asegúrate de no declarar funciones como...

Code:
function isFloat(n) {
    return n % 1 != 0;
}

Ya que así estas declarando una variable global, es mejor usar asignaciones a funciones anónimas como haces con las demás, pero intentando hacerlo fuera del scope global

Espero que te sirva!


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: xacobe97 on March 30, 2013, 08:50:27 PM
Felicidades  :) me han servido para inspirarme esas funciones, lo único que faltaría es parsear el valor de los BTC automáticamente de algún sitio, por ejemplo btc-e. Por el resto está muy bien. Saludos.

Gracias xacobe97. No hay nada como saber que tu trabajo resulta útil a otras personas. En efecto, falta lo que dices. Tengo apuntadas unas APIs por ahí que creo que podrían solucionar esa parte (quizás la de Blockchain.info, pero aún no estoy seguro porque las miré de pasada). Lo voy a investigar en breve, así que cuando dé con la tecla lo comentaré aquí.

Bienvenido!

Siempre esta bien introducirse con una contribución.

Tengo alguna pregunta y sugerencias para tu código, si las aceptas ;)

Saludos

Hola Ogig, y gracias por la bienvenida. Por supuesto, sugiere y pregúntame cuanto quieras.

Por cierto, hoy he hecho una nueva versión. En unos minutos la publicaré aquí.

Hasta ahora.

De nada hombre! Y sí, me ha sido útil, y se ve que le has puesto empeño. Lo de la API sería genial, la verdad. Mira, te voy a mandar lo poco que me queda de mi viejo wallet, no es demasiado pero bueno ;) Saludos y gracias!
http://screencloud.net/v/ct55


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 31, 2013, 11:55:22 AM
@xacobe97: Gracias a ti.

@Ogig:

Sobre tfxp() supongo que llevas razón, y que no sería necesaria. Fijate en el enlace que pongo sobre dicha función. Ahí se comenta lo del límite de e21 para toFixed() y se propone una función toFixed() alternativa sin ese límite (que es tfxp() en mi código). Supongo que me puse "nervioso" al leer lo que se dice en ese enlace  :D y quise curarme en salud. Así que al final acabé usando tfxp() para evitar la notación científica y toFixed() para recortar a un número específico de decimales. Pero seguro que puede hacerse mucho mejor.

La verdad es que aún soy muy novato en Javascript (vengo de Actionscript y PHP, y de un estilo muy diferente de programar), pero estoy aprendiendo y digeriendo todo lo rápido que soy capaz.

Lo que me comentas de usar algún patrón creo que excede mis conocimientos actuales (¿sabrías de algún tutorial que pueda ayudarme a entenderlo?). Este código lo hice consciente de que sería más profesional hacerlo como una clase instanciable, o metiendo todas las funciones dentro de un objeto. Pero como apenas estoy empezando a aclararme con todos esos conceptos preferí hacerlo así (por eso lo llamé "colección de funciones" y no "librería"), con la esperanza de que programadores más avanzados que yo lo adecentaran o lo modificaran a su gusto.

En cualquier caso me parecen valiosísimas tus sugerencias, y tomo buena nota. Estoy seguro de que poco a poco iré comprendiéndolas y refinando mi "salvaje" estilo con Javascript, que falta me hace, ya que mi gran objetivo en uno o dos años es hacer una librería para crear canales de radio y TV on-line como la que ya hice en Flash en su día (http://www.myvirtualtv.net/qooka).

Gracias por tus aportes  :)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: X_X_X on March 31, 2013, 12:35:12 PM
De qué manera podría mejorarse el código para que automáticamente recoja la cotización del BTC en mtgox?


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 31, 2013, 01:43:03 PM
De qué manera podría mejorarse el código para que automáticamente recoja la cotización del BTC en mtgox?

Hola X_X_X. Si te fijas se lo he comentado a xacobe97 en el cuarto post de este hilo. Habría que usar alguna API que nos proporcione la cotización. Tengo previsto investigarlo en breve. En cuanto sepa cómo hacerlo lo comentaré aquí. Saludos.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 31, 2013, 02:35:27 PM
Bien, ya he estado indagando un poco sobre cómo obtener la cotización actual del BTC. Sólo hay que usar la API de Mt.Gox que nos da los datos directamente en formato JSON:

Ejemplos:

Para obtener la cotización en dólares:

https://data.mtgox.com/api/2/BTCUSD/money/ticker


...y en euros:

https://data.mtgox.com/api/2/BTCEUR/money/ticker


¡¡Que aproveche!!  :)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 31, 2013, 02:56:25 PM
Tengo que añadir algo sobre el uso de la API de Mt.Gox. Echad un vistazo a este hilo, y al que se enlaza al final de su post #5:

https://bitcointalk.org/index.php?topic=22565.0


Como véis, se dice que es considerado una mala práctica el llamar a la API de Mt.Gox cada vez que alguien cargue nuestra página, y que es mejor llamar sólo cada cierto período de tiempo (cada hora, cada dos o una vez al día), y almacenar el valor en una base de datos o en un archivo.

En el citado post #5 se redirige a otro hilo en el que nos facilitan un script PHP que hace eso mismo.

Saludos.



Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: dserrano5 on March 31, 2013, 04:28:18 PM
Creo que interesaría más un valor ponderado entre varios exchanges, en lugar de tirar de uno solo de ellos. ¿Qué tal https://blockchain.info/ticker ?


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on March 31, 2013, 05:41:11 PM
Creo que interesaría más un valor ponderado entre varios exchanges, en lugar de tirar de uno solo de ellos. ¿Qué tal https://blockchain.info/ticker ?

¡¡Buena idea!! Tomo nota. Entiendo que esos valores que da Blockchain vienen a ser los valores ponderados entre los distintos exchanges que pueden verse en Bitcoinwatch.com. ¿Me equivoco?


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: dserrano5 on March 31, 2013, 06:31:16 PM
¡¡Buena idea!! Tomo nota. Entiendo que esos valores que da Blockchain vienen a ser los valores ponderados entre los distintos exchanges que pueden verse en Bitcoinwatch.com. ¿Me equivoco?

Ah, pues realmente no lo sé…


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on March 31, 2013, 06:31:52 PM
@xacobe97: Gracias a ti.

@Ogig:

Sobre tfxp() supongo que llevas razón, y que no sería necesaria. Fijate en el enlace que pongo sobre dicha función. Ahí se comenta lo del límite de e21 para toFixed() y se propone una función toFixed() alternativa sin ese límite (que es tfxp() en mi código). Supongo que me puse "nervioso" al leer lo que se dice en ese enlace  :D y quise curarme en salud. Así que al final acabé usando tfxp() para evitar la notación científica y toFixed() para recortar a un número específico de decimales. Pero seguro que puede hacerse mucho mejor.

La verdad es que aún soy muy novato en Javascript (vengo de Actionscript y PHP, y de un estilo muy diferente de programar), pero estoy aprendiendo y digeriendo todo lo rápido que soy capaz.

Lo que me comentas de usar algún patrón creo que excede mis conocimientos actuales (¿sabrías de algún tutorial que pueda ayudarme a entenderlo?). Este código lo hice consciente de que sería más profesional hacerlo como una clase instanciable, o metiendo todas las funciones dentro de un objeto. Pero como apenas estoy empezando a aclararme con todos esos conceptos preferí hacerlo así (por eso lo llamé "colección de funciones" y no "librería"), con la esperanza de que programadores más avanzados que yo lo adecentaran o lo modificaran a su gusto.

En cualquier caso me parecen valiosísimas tus sugerencias, y tomo buena nota. Estoy seguro de que poco a poco iré comprendiéndolas y refinando mi "salvaje" estilo con Javascript, que falta me hace, ya que mi gran objetivo en uno o dos años es hacer una librería para crear canales de radio y TV on-line como la que ya hice en Flash en su día (http://www.myvirtualtv.net/qooka).

Gracias por tus aportes  :)

Yo diría que sí, el txfp es innecesario para este uso.

Mira, he creado una versión simple de tu código usando el patrón de módulo, va muy comentada. Los objetivos principales son organizar el código, y sobre todo, no contaminar el objeto Window con un montón de variables. Piensa que en tu código estás usando más de 40 variables globales, en el mío sólo hay una variable global, BtcConv, y de ahí se cuelgan el resto.

Además me he permitido añadir un índice de valores para hacerla más flexible. Si necesitas cualquier aclaración no te cortes.

http://bitbin.it/nbyGZEeR

Si vas a meterte a serio con JS te recomiendo este libro:

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742

Es corto, conciso, y te aclara muchas dudas naturales.

Algo más avanzado pero muy útil es:

http://www.amazon.com/Learning-JavaScript-Design-Patterns-Osmani/dp/1449331815/

En google, "Javascript Patterns" te dará material de estudio para un buen rato.

Última recomendación para aprender JS bien bien. Usa la librería underscore.js y gasta 10-20 horas aprendiendo las bases de un lenguaje funcional puro como haskell. Meterse con node.js y empezar a hacer scripts para servers es útil también.

Ánimo, JS es raro pero muy molón ;)

Saludos


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 12:32:05 AM
Ogig, es sencillamente alucinante tu código.  :o

Creo que ya me voy haciendo cierta idea de cómo podría aplicarlo a una próxima versión de mi script de conversión, pero antes tendré que empollarme un poco el tema de los patrones. Por el momento voy a intentar no liarme más y usaré el que he hecho (v1.1) para la herramienta de conversión que estoy preparando, y luego, ya con más calma, intentaré refinarla aplicando tus consejos.

Apunto las referencias que me has dado. He estado mirando los comentarios de los lectores en Amazon y se ven muy interesantes los libros (especialmente el primero).

Respecto a Haskell he estado mirando un tutorial (http://aprendehaskell.es) y me suena un poco a chino todo. La verdad es que me cuesta seguir tutoriales. Se me hacen un tanto fríos. Funciono mejor embarcándome en proyectos que me motiven lo suficiente como para aprender lo necesario para desarrollarlos (así he aprendido lo que sé hasta hoy y así hice la aplicación de radio/TV que te enseñé en Flash). Los resultados a veces son toscos (poco elegantes, aunque funcionen para mí, que es siempre mi prioridad inicial), pero luego voy sacando versiones más refinadas conforme voy aprendiendo más cosas.

En fin, poquito a poco espero ir haciéndolo mejor.  :)

Mil gracias por dedicarme tu tiempo y tus valiosos consejos. ;)


PD: Por cierto, el proyecto de librería para radio/TV en Javascript (proyecto QK+ se llama) es, evidentemente, muy ambicioso para hacerlo yo solo, así que tengo pensado lanzarlo como un proyecto colaborativo donde participe todo el que quiera aportar algo. Si te interesa participar o asesorar de algún modo sobra decir que tienes las puertas abiertas. Sería todo un privilegio contar con alguien como tú. Además, las aplicaciones prácticas serían muy interesantes, incluyendo muchas cosas que podrían hacerse en relación con los bitcoins. Saludos.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 12:37:18 AM
¡Ah! Sobre la librería underscore he estado leyendo algo también. No la conocía, y dicen que sirve para facilitar tareas comunes con Javascript, pero se me escapa entender cómo podría serme útil, por ejemplo, en mi script de conversión. Saludos.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 02:04:21 AM
Ogig, al final me he desvelado pensando en tus sugerencias  :D así que me he puesto manos a la obra a aplicarlas...

Ahí va la versión 1.2:

http://bitbin.it/lE5QwXAM


Échale un ojo a ver cómo lo ves.

Por cierto, tenías razón: tfxp() era absolutamente inútil, así que a freir espárragos la he mandado.  :)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 02:09:32 AM
Bueno, una autocrítica para empezar: lo de "//PUT HERE the BTC current or historic value" debería haberlo quitado, ya que ahora debería introducirse el valor externamente haciendo btcConv.val = loquesea.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: X_X_X on April 01, 2013, 08:40:25 AM
Joder hay que ver como os lo currais eh? Una cosa, dais permiso para utilizar el código libremente en nuestros proyectos personales?  ;D

De todas formas izzukay, se me ocurre que ya que https://blockchain.info/ticker te muestra en texto plano todos esos datos no sería mas sencillo hacer un código que lea esas lineas  tal cual y "extraiga" la cotización deseada?
Es que hace algún tiempo ya intenté programar algo parecido (y yo que soy muy malo en esto...) pero me perdí un poco con eso del JSON y la documentación oficial de la API de mtgox  :-\

Un saludo.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 03:43:23 PM
Joder hay que ver como os lo currais eh? Una cosa, dais permiso para utilizar el código libremente en nuestros proyectos personales?  ;D

Bueno, como no está bajo ninguna licencia (aún  ;D ) creo que el código puede considerarse de dominio público, y por lo tanto puede usarse libremente. Eso sí, si lo vas a modificar y/o redistribuir sería todo un detalle conservar el reconocimiento al autor original.  :)


De todas formas izzukay, se me ocurre que ya que https://blockchain.info/ticker te muestra en texto plano todos esos datos no sería mas sencillo hacer un código que lea esas lineas  tal cual y "extraiga" la cotización deseada?
Es que hace algún tiempo ya intenté programar algo parecido (y yo que soy muy malo en esto...) pero me perdí un poco con eso del JSON y la documentación oficial de la API de mtgox  :-\

Entiendo que te refieres a "scrapear" ese texto plano que devuelve Blockchain y coger lo necesario. En principio no veo problema en optar por esa alternativa si no consigues que te funcione de otro modo.

Ahora bien, como buen novatillo en Javascript yo también tuve problemas hace poco para leer datos JSON, y la solución a la que he recurrido hasta ahora ha sido usar el método 'ajax' de jQuery.

En mi caso, lo que hice fue llamar a un script PHP en mi servidor local que llama al servidor remoto, recibe los datos y los entrega a Javascript:

Code:
$.ajax({ 
        type: "GET",
        dataType: "json",       
url:'http://www.mi_servidor_local.com/recibeDatos.php',
        success:function(data){
                //Hago lo que sea con 'data'.
        }
});

Eso es lo que he hecho yo hasta ahora, pero creo que hay formas más adecuadas de obtener datos JSON.

En fin, te dejo unos artículos sobre cómo trabajar con JSON en Javascript por si alguno te arroja algo de luz:

http://www.cristalab.com/tutoriales/leer-json-con-javascript-y-php-c104372l/
http://blog.openalfa.com/como-leer-ficheros-json-en-javascript/
http://web.ontuts.com/tutoriales/jsonp-llamadas-ajax-entre-dominios/

¡¡Saludos!!


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 01, 2013, 04:16:57 PM
Buenas!

izzukay, me alegra ser de ayuda.

He visto tu nueva versión y ya veo que has usado un solo objeto para todas tus variables, bien hecho. De ese modo podrás copiar y pegar tus funciones en otras partes sin miedo a colisiones.

Pero he de decir que no me gusta nada esa colección enorme de funciones y todas hacen casi lo mismo. Hay que buscar el mínimo denominador común.

http://jsfiddle.net/guillermosan/Z8kAx/

He creado este fiddle donde puedes ver como me aproximaría yo a este problema. Una función lo resuelve todo, y además añadir una nueva moneda es sencillo. Usando el btc como base puedes incluso pasar de USD a EUR.

Sobre el tema que habláis de usar la api de mtgox o blockchain, es perfectamente posible, pero no desde el código del cliente. En principio los navegadores usan la "Same Origin Policy" y no te dejan cargar datos vía JS que no sean del servidor que sirvió el script. (hay excepciones y truquitos como websockets y webrtc, pero bueno). Lo mejor es hacer en el server un llamada cada X tiempo a blockchain.info y servir esos datos al cliente desde nuestro propio server.

EDIT:

Estaba releyendo el hilo y me quedan un montón de cosas que contestar! :p

Suelo estar en #bitcoin-es en freenode así que pásate/pasaros por ahí para hablar en profundidad cualquier tema.

Saludos


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 05:02:06 PM
Hola Ogig.

Pero he de decir que no me gusta nada esa colección enorme de funciones y todas hacen casi lo mismo. Hay que buscar el mínimo denominador común.

Sí, de eso me di cuenta desde el principio, pero me movía en el dilema de hacerlo todo superconciso, o permitir que personas con conocimientos no muy avanzados de Javascript (como yo) pudiesen identificar y aislar sin demasiada dificultad funciones específicas que necesitasen. De hecho al principio me lo plantee de forma que cada función fuese independiente y autosuficiente respecto a las demás (salvando las necesarias funciones 'requested', claro).

Pero bueno, como ya tenemos versiones para todos los gustos, y creo que inteligibles para cualquier nivel de conocimientos JS, creo que no hay problema en avanzar, y a mí me vendrá bien para ir aprendiendo más.

Voy a estudiar tu fiddle (por cierto, chapó por ese conversor), y a ver qué me sale.  :D

Eso sí, el problema que veo ahora es que un usuario final no podría usar una divisa que no esté listada en BtcConv.currencies. Antes eso no importaba, siempre que el usuario introdujese la cotización del BTC respecto a esa divisa.

Sobre el tema que habláis de usar la api de mtgox o blockchain, es perfectamente posible, pero no desde el código del cliente. En principio los navegadores usan la "Same Origin Policy" y no te dejan cargar datos vía JS que no sean del servidor que sirvió el script. (hay excepciones y truquitos como websockets y webrtc, pero bueno). Lo mejor es hacer en el server un llamada cada X tiempo a blockchain.info y servir esos datos al cliente desde nuestro propio server.

Sí, eso he leído. En el post #12 dejé una referencia a un hilo en el que hablan sobre ello, y facilitan un script PHP que se encarga de hacer esas llamadas periódicas y almacenarlas en una base de datos o archivo.

El problema que se me plantea con esas llamadas cada cierto tiempo es el siguiente: Si voy a hacer un conversor entiendo que el usuario busca exactitud en los datos que le voy a facilitar. Y si el resultado se basa en datos que fueron leídos 50 minutos antes, pues no es muy exacto ¿no? (pueden haber cambiado mucho las cosas en 50 minutos). Para mostrar información sobre la cotización en una página entiendo que se haga así. Pero para un conversor del que el usuario espera la máxima exactitud posible la verdad es que me choca un poco hacerlo así. Buff, no sé. Estoy más liado que la pata de un romano.  ???

Por otro lado está el tema de si leer los datos de Mt.Gox (es lo que pide mucha gente) o leer los de Blockchain (como sugirió an0therlr3) que se supone que son valores ponderados de entre distintos exchanges (aunque no sé de qué exchages se trata exactamente). Quizás la mejor opción sería que el propio usuario seleccionase qué datos usar para la conversión.

Suelo estar en #bitcoin-es en freenode así que pásate/pasaros por ahí para hablar en profundidad cualquier tema.

Perfecto, lo tengo en cuenta. Muchas zenkius.  :)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 01, 2013, 05:28:40 PM
Sí, eso he leído. En el post #12 dejé una referencia a un hilo en el que hablan sobre ello, y facilitan un script PHP que se encarga de hacer esas llamadas periódicas y almacenarlas en una base de datos o archivo.

El problema que se me plantea con esas llamadas cada cierto tiempo es el siguiente: Si voy a hacer un conversor entiendo que el usuario busca exactitud en los datos que le voy a facilitar. Y si el resultado se basa en datos que fueron leídos 50 minutos antes, pues no es muy exacto ¿no? (pueden haber cambiado mucho las cosas en 50 minutos). Para mostrar información sobre la cotización en una página entiendo que se haga así. Pero para un conversor del que el usuario espera la máxima exactitud posible la verdad es que me choca un poco hacerlo así. Buff, no sé. Estoy más liado que la pata de un romano.  ???

Tú haces que el server actualice los datos cada minuto por ejemplo. Ahora es misión del código JS que escribas en el cliente que se ejecute, cada minuto también, una llamada ajax actualizando los valores de los precios con los datos del server. Así tendrías un lag de 2 minutos máximo, pero es cuestión de cambiar los intervalos de consulta si lo necesitas más preciso.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 01, 2013, 05:34:17 PM

Eso sí, el problema que veo ahora es que un usuario final no podría usar una divisa que no esté listada en BtcConv.currencies. Antes eso no importaba, siempre que el usuario introdujese la cotización del BTC respecto a esa divisa.


Un usuario siempre puede hacer

Code:
BtcConv.currencies.patacon = {price: 20, decimals: 5};

para añadir una divisa.

Igualmente puedes usar

Code:
BtcConv.currencies.USD.price = 79;

y actualizar un valor con los datos json del server por ejemplo.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 01, 2013, 07:35:34 PM
¡Ajá! Bien, pues entonces tenemos que el formulario del conversor tendrá que permitir, no sólo escoger una divisa, sino también permitir usar una genérica (no listada) cuyo valor especifique el propio usuario.

El usuario también debe poder modificar el valor de cualquier divisa (por ejemplo, para hacer una conversión respecto a una cotización histórica).

¡Buff! Tengo las neuronas en estado de rebelión ya.  ;D Por el momento voy a tratar de pensar en otra cosa (como preparar la plantilla web que usaré). En cuanto vuelva a estar listo retomaré esto con energías renovadas y a ver qué sale.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 01, 2013, 08:40:04 PM
Mirad, al final me he metido un poco con la api de websockets de mtgox. Ahora pilla el valor del USD y del EUR en tiempo real :)

http://jsfiddle.net/guillermosan/Z8kAx/



Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 11:12:44 AM
 :o :o :o ¡¡Madre mía!! En tiempo real. Así sí mola. Eso es lo que necesito para coger la cotización.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: rbit on April 02, 2013, 11:18:44 AM
Cuando esta terminado avisar  ;D ... que al final se quedara perfecto.



Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 11:34:40 AM
Cuando esta terminado avisar  ;D ... que al final se quedara perfecto.

Lo venderemos a un módico precio.  ;D

Voy a ponerme yo también con los churros, que ya está el aceite caliente.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 08:28:27 PM
Ogig, me he permitido hacer un fiddle a partir del tuyo para experimentar y liarla parda.  :D

http://jsfiddle.net/izzukay/CTjhj/15/


El reto era tratar de implementar la conversión con céntimos de divisa, y en ello sigo. El caso es que algo anda mal: si convierto 15 euros a BTCs me da 0.18, pero si convierto 1500 c€ a BTCs me da 18 (y pico), es decir, me los trata como si fueran 1500€.

Me da la impresión de que es alguna tontada que se me ha pasado por alto, pero aún no he dado con ella. Voy a seguir a ver si lo soluciono.


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 08:37:03 PM
Por cierto, ¿cómo hago en jsFiddle para que al publicar aquí este enlace:

http://jsfiddle.net/izzukay/CTjhj/


...se muestre la última actualización que he hecho? En el momento de escribir este post la última actualización sería ésta:

http://jsfiddle.net/izzukay/CTjhj/16/


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 08:39:11 PM
Me autorrespondo: 'Set as base version'  8)


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 02, 2013, 11:13:21 PM
Ogig, me he permitido hacer un fiddle a partir del tuyo para experimentar y liarla parda.  :D

http://jsfiddle.net/izzukay/CTjhj/15/


El reto era tratar de implementar la conversión con céntimos de divisa, y en ello sigo. El caso es que algo anda mal: si convierto 15 euros a BTCs me da 0.18, pero si convierto 1500 c€ a BTCs me da 18 (y pico), es decir, me los trata como si fueran 1500€.

Me da la impresión de que es alguna tontada que se me ha pasado por alto, pero aún no he dado con ella. Voy a seguir a ver si lo soluciono.

Estás multiplicando el precio por el kind y no hace falta :

Code:
 var btcs = conversion.amount / (BtcConv.currencies[conversion.from].price * BtcConv.kinds[BtcConv.currencies[conversion.from].kind ]);


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 11:47:53 PM
Estás multiplicando el precio por el kind y no hace falta :

Cierto Ogig. Me he dado cuenta hace unos minutos (después de devanarme los sesos  ;D ). Gracias.  ;)

Ahora estoy devanándomelos otra vez. El problema ahora es que, con una cotización BTC/EUR de 84.96739 (la he puesto fija, sin llamar a Mt.Gox, para no volverme loco) me ocurre esto:

15 BTC -> 1274.51 € (correcto)

15 BTC -> 12745108.50 c€ (error)


Claramente estoy multiplicando por 100 en alguna parte. Estoy intentando encontrar donde.

http://jsfiddle.net/izzukay/CTjhj/18/


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: Ogig on April 02, 2013, 11:53:46 PM
Estás multiplicando el precio por el kind y no hace falta :

Cierto Ogig. Me he dado cuenta hace unos minutos (después de devanarme los sesos  ;D ). Gracias.  ;)

Ahora estoy devanándomelos otra vez. El problema ahora es que, con una cotización BTC/EUR de 84.96739 (la he puesto fija, sin llamar a Mt.Gox, para no volverme loco) me ocurre esto:

15 BTC -> 1274.51 € (correcto)

15 BTC -> 12745108.50 c€ (error)


Claramente estoy multiplicando por 100 en alguna parte. Estoy intentando encontrar donde.

http://jsfiddle.net/izzukay/CTjhj/18/

Pues lo mismo en la línea de abajo.

Code:
var outputCurrency = BtcConv.dlZ( (btcs * BtcConv.currencies[conversion.to].price * BtcConv.kinds[ BtcConv.currencies[conversion.to].kind ]).toFixed(BtcConv.currencies[conversion.to].decimals) );


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 02, 2013, 11:58:05 PM
Pues lo mismo en la línea de abajo.

¡¡Madre mía!! Y yo aquí haciendo reglas de tres en una libreta.  :D

Como se nota que soy de letras. ¡¡Mil gracias!!


Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 03, 2013, 07:13:34 PM
¡¡Habemus conversor!!  :D

http://jsfiddle.net/izzukay/CTjhj/


Bien, paso a explicar un poco...

Lo primero comentar que la API de Mt.Gox apenas está funcionando hoy (he leído que han sufrido un ataque o nosequé). Para casos como éste, o para convertir a partir de cotizaciones históricas, o de otros exchanges, he añadido los campos price, que permiten introducir la cotización manualmente.

Para aclarar ideas: los campos price siempre deben indicar cuántas unidades de la divisa/subdivisa de turno hay en un BTC.

Para EUR y USD, el valor (auto) de estos campos implica trabajar con la cotización de Mt.Gox que se muestra abajo, siempre que se muestre, claro. Si no se muestra (aparece el texto Waiting for Mt.Gox data) habrá que introducir la cotización manualmente.

Obviamente, para BTC y sus subdivisas, el price debe dejarse en (auto), ya que son valores fijos al estar el conversor basado en el BTC.

También he añadido la casilla High precission que sirve para añadir 2 decimales extra (4 en total) cuando convertimos a dólares o euros.

Para trabajar con otras divisas (que no sean EUR ni USD) se puede seleccionar generic. En tal caso habrá que introducir la cotización manualmente, y devolverá el resultado en generic currency units.



Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: rbit on April 04, 2013, 01:01:57 PM
Se quedo bien al final eh... jejeje

Lo intentare agregar a un blog para ver como queda  ;)



Title: Re: Javascript: Funciones de conversión de bitcoins
Post by: izzukay on April 04, 2013, 05:48:33 PM
Se quedo bien al final eh... jejeje

Bueno, todo es mejorable. Pero creo que cumple con creces mis objetivos iniciales. Espero que te sirva a ti también.  ;)