import requests import json import streamlit as st import pandas as pd import datetime from st_aggrid import AgGrid, GridOptionsBuilder, JsCode url_pos = "https://www.binance.com/bapi/futures/v1/public/future/leaderboard/getOtherPosition" url = "https://www.binance.com/fr/futures-activity/leaderboard/user?encryptedUid=EE56F412D7DAB7DBAFCEC2147FA2D223" url_perf = "https://www.binance.com/bapi/futures/v2/public/future/leaderboard/getOtherPerformance" url_name = "https://www.binance.com/bapi/futures/v2/public/future/leaderboard/getOtherLeaderboardBaseInfo" headers = { 'Content-Type': 'application/json', } def get_data(id: str): payload = json.dumps({ "encryptedUid": id, "tradeType": "PERPETUAL" }) response = requests.request("POST", url_pos, headers=headers, data=payload) x = response.json()["data"]["otherPositionRetList"] itog = [] for i in x: if 'updateTime' in i.keys(): # breakpoint() i.pop('updateTime') i.pop('yellow') i.pop('tradeBefore') i["updateTimeStamp"] = datetime.datetime.fromtimestamp(i["updateTimeStamp"]//1000) i["roe"] = i["roe"]*100 i["roe"] = round(i["roe"], 2) i["entryPrice"] = round(i["entryPrice"], 3) i["markPrice"] = round(i["markPrice"], 3) i["pnl"] = round(i["pnl"], 2) itog.append(pd.DataFrame.from_dict([i])) itog = pd.concat(itog , axis=0, ignore_index=True)[["symbol", "amount", "leverage","entryPrice","markPrice", "pnl", "roe","updateTimeStamp"]] return itog def get_name(id: str): payload = json.dumps({ "encryptedUid": id }) response = requests.request("POST", url_name, headers=headers, data=payload) x = response.json()["data"]["nickName"] return x def get_table(id, name): df = get_data(id) gd= GridOptionsBuilder.from_dataframe(df) cellstyle_jscode = JsCode(""" function(params){ if (params.value < '0') { return{ 'color': 'red' } } if (params.value > '0') { return{ 'color': 'green' } } } """) gd.configure_default_column(min_column_width=1) gd.configure_columns(column_names= ["pnl", "roe", "amount"], cellStyle= cellstyle_jscode) grid_options = gd.build() st.header(name) return AgGrid(df, gridOptions=grid_options, allow_unsafe_jscode=True, fit_columns_on_grid_load=True) with open("./links.txt", 'r') as f: links = f.readlines() links = [i.strip().replace("https://www.binance.com/fr/futures-activity/leaderboard/user?encryptedUid=", "") for i in links] links = {get_name(i):i for i in links} print(links) st.set_page_config(layout="wide") op = st.multiselect("traders", options=links.keys()) print(op) for i, name in enumerate(op): get_table(links[name], name)