File size: 6,322 Bytes
1399ead
240402d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9876ba9
240402d
 
 
 
 
 
 
 
 
 
9876ba9
240402d
 
 
 
 
 
 
 
 
 
 
 
1399ead
240402d
 
 
 
 
ca742f0
1399ead
 
 
 
 
 
 
240402d
 
 
 
ca742f0
1399ead
 
 
 
 
 
 
 
ca742f0
1399ead
ca742f0
 
 
240402d
1399ead
 
 
 
 
 
 
 
240402d
 
 
ca742f0
1399ead
 
 
240402d
 
 
 
 
 
 
1399ead
240402d
1399ead
 
 
 
 
 
 
 
 
240402d
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import gradio as gr #interface gráfica
import requests
import re

def cotiza_btc(compra_prima, venta_prima):
    
    #compra_prima = 6 #porcentaje
    #venta_prima = 6 #porcentaje
    url_yadio_BTC_ARS = 'https://api.yadio.io/convert/1/BTC/ARS'
    url_p2p_buy = 'https://api.yadio.io/market/ads?currency=ARS&side=buy&limit=10' #10 resultados
    url_p2p_sell = 'https://api.yadio.io/market/ads?currency=ARS&side=sell&limit=25' #25 resultados
    
    #YADIO
    
    global yadio_BTC_ARS
    yadio_BTC_ARS = requests.get(url_yadio_BTC_ARS).text
    yadio_BTC_ARS = re.search(r'"result":(\d+).\d*,', yadio_BTC_ARS) #captura precio
    yadio_BTC_ARS = int(yadio_BTC_ARS[1])
    
    #COMPRA
    
    global compra
    compra = yadio_BTC_ARS + (yadio_BTC_ARS * compra_prima / 100)
    
    #VENTA
    
    global venta
    venta = yadio_BTC_ARS - (yadio_BTC_ARS * venta_prima / 100)
    
    #BINANCE COMPRA
    
    binancep2p_ARS_BUY = requests.get(url_p2p_buy).text
    binancep2p_ARS_BUY = re.findall(r'"price":([0-9]+)[0-9.]*,"ad_id":"[0-9]+","ad_url":"https:\/\/p2p\.binance\.com', binancep2p_ARS_BUY) #extraigo varios precios
    binancep2p_ARS_BUY_promedio = 0 #para sumar y promediar precios
    for x in binancep2p_ARS_BUY:
        binancep2p_ARS_BUY_promedio += int(x)
    if not binancep2p_ARS_BUY_promedio == 0:
        binancep2p_ARS_BUY_promedio = binancep2p_ARS_BUY_promedio/len(binancep2p_ARS_BUY) #promedio
        binancep2p_ARS_BUY_promedio = round(binancep2p_ARS_BUY_promedio, 2)
    
    #BINANCE VENTA
    
    binancep2p_ARS_SELL = requests.get(url_p2p_sell).text
    binancep2p_ARS_SELL = re.findall(r'"price":([0-9]+)[0-9.]*,"ad_id":"[0-9]+","ad_url":"https:\/\/p2p\.binance\.com', binancep2p_ARS_SELL) #extraigo varios precios
    binancep2p_ARS_SELL_promedio = 0 #para sumar y promediar precios
    for x in binancep2p_ARS_SELL:
        binancep2p_ARS_SELL_promedio += int(x)
    if not binancep2p_ARS_SELL_promedio == 0:
        binancep2p_ARS_SELL_promedio = binancep2p_ARS_SELL_promedio/len(binancep2p_ARS_SELL) #promedio
        binancep2p_ARS_SELL_promedio = round(binancep2p_ARS_SELL_promedio, 2)
    
    #SALIDA
    
    #return compra, compra_prima, venta, venta_prima, yadio_BTC_ARS, binancep2p_ARS_BUY_promedio, binancep2p_ARS_SELL_promedio

    #SALIDA huggingface
    
    micotizacion = f"Compra: {compra} ARS; Venta: {venta} ARS"
    cotizacionexchanges = f"Yadio: {yadio_BTC_ARS} ARS; Binance P2P compra (promedio): {binancep2p_ARS_BUY_promedio} ARS; Binance P2P venta (promedio): {binancep2p_ARS_SELL_promedio} ARS"
    
    return micotizacion, cotizacionexchanges
    
def cotiza_monto(monto, tipo, compra_prima, venta_prima): #tipo es compra o venta
    
    if tipo == "compra":
        global compra
        son_satoshis = str(int(monto / compra * 100000000)) + " SATS"
        son_pesos = "" #para que no se imprima a la salida
        monto_en = "ARS"
        son_satoshis_noprima = round(int(monto / yadio_BTC_ARS * 100000000)) #cambio sin prima
        ganancia_compraSATS = round((monto / yadio_BTC_ARS * 100000000) -int(son_satoshis[:-5])) #ganancia en satoshis
        ganancia_compraARS = round(ganancia_compraSATS / 100000000 * yadio_BTC_ARS, 0) #ganancia en ARS
        ganancia_compraARS = str(ganancia_compraARS) + " ARS"
        ganancia_ARS = ganancia_compraARS
        detalles = f"Gano en sats: {ganancia_compraSATS} SATS; (+{compra_prima}%). Cambio sin prima: {son_satoshis_noprima} SATS"
        
    else:
        global venta
        son_pesos = str(int(monto * venta / 100000000)) + " ARS"
        son_satoshis = "" #para que no se imprima a la salida
        monto_en = "SATS"
        #son_pesos_noprima = int(monto * venta / 100000000) #cambio sin prima
        son_pesos_noprima = round(monto / 100000000 * yadio_BTC_ARS) #cambio sin prima
        ganancia_venta_ARS = round(son_pesos_noprima - int(son_pesos[:-4]), 0) #ganancia en ARS
        ganancia_ventaSATS = round(monto * venta_prima /100)
        ganancia_ARS = str(ganancia_venta_ARS) + " ARS"
        detalles = f"Gano en sats: {ganancia_ventaSATS} SATS; (+{venta_prima}%). Cambio sin prima: {son_pesos_noprima} ARS"
    
    #estilos y html para las salidas:
    clases_css = "text-gray-500 text-[0.855rem] mb-2 block dark:text-gray-200 relative z-40 scroll-hide block gr-box gr-input w-full gr-text-input"
    
    cotizamonto_out_style = "style='font-size: larger; background-color: #ffa500; color: #461000; text-align: center'"
    salida_html = f"<div class='cotizamonto_out {clases_css}' {cotizamonto_out_style}>{monto} {monto_en} -> {son_satoshis}{son_pesos}</div>"
    salida = salida_html
    
    cotizamonto_ganancia_style = "style='font-size: larger; background-color: #c8ff00; color: #334600; text-align: center'"
    ganancia_ARS_HTML = f"<div class='{clases_css}'{cotizamonto_ganancia_style}>gano:<br>{ganancia_ARS}</div>"
    ganancia_ARS = ganancia_ARS_HTML
    
    detalles_HTML = f"<div class='{clases_css}'>{detalles}</div>"
    detalles = detalles_HTML
    
    return salida, ganancia_ARS, detalles

## UI

with gr.Blocks() as cotizabtc:
    with gr.Row():
        cotizabtc_inp_1 = gr.Slider(label="Compra prima", minimum=0, maximum=12, value=6, step=1)
        cotizabtc_inp_2 = gr.Slider(label="Venta prima", minimum=0, maximum=12, value=6, step=1)
    cotizabtc_out_1 = gr.Textbox(label="Mi cotización:")
    cotizabtc_out_2 = gr.Textbox(label="Cotizaciones exchanges:")

    cotizabtc_btn = gr.Button("cotizaciones")
    cotizabtc_btn.click(fn=cotiza_btc, inputs=[cotizabtc_inp_1, cotizabtc_inp_2], outputs=[cotizabtc_out_1, cotizabtc_out_2])
    
    #--- cotizamonto:
    cotizamonto_inp_1 = gr.Slider(label="Monto (ars/sats):", minimum=500, maximum=100000, value=1000, step=500)
    cotizamonto_inp_2 = gr.Radio(["compra", "venta"], label="tipo")
    with gr.Row():
        with gr.Column():
            with gr.Row():
                cotizamonto_out = gr.HTML()
                cotizamonto_ganancia_out = gr.HTML()
            cotizamonto_detalle_out = gr.HTML()
        cotizamonto_btn = gr.Button("cotizar!")
    
    cotizamonto_btn.click(fn=cotiza_monto, inputs=[cotizamonto_inp_1, cotizamonto_inp_2, cotizabtc_inp_1, cotizabtc_inp_2], outputs=[cotizamonto_out, cotizamonto_ganancia_out, cotizamonto_detalle_out])

#---------------

cotizabtc.launch()