Javascript API二进制获得自由平衡

Javascript API二进制获得自由平衡,javascript,node.js,api,binance,Javascript,Node.js,Api,Binance,我是API新手,非常感谢您的建议。 我想回忆一下Binance API“GET/API/v3/account(HMAC SHA256)”,只获取我帐户上可用的免费资产 我得到的代码是这样的: { "makerCommission": 15, "takerCommission": 15, "buyerCommission": 0, "sellerCommission": 0, "canTr

我是API新手,非常感谢您的建议。 我想回忆一下Binance API“GET/API/v3/account(HMAC SHA256)”,只获取我帐户上可用的免费资产

我得到的代码是这样的:

{
  "makerCommission": 15,
  "takerCommission": 15,
  "buyerCommission": 0,
  "sellerCommission": 0,
  "canTrade": true,
  "canWithdraw": true,
  "canDeposit": true,
  "updateTime": 123456789,
  "accountType": "SPOT",
  "balances": [
    {
      "asset": "BTC",
      "free": "4723846.89208129",
      "locked": "0.00000000"
    },
    {
      "asset": "LTC",
      "free": "4763368.68006011",
      "locked": "0.00000000"
    }
  ],
    "permissions": [
    "SPOT"
  ]
}
我只是想要自由平衡,所以我尝试使用映射方法,但我得到了以下错误:

Cannot read property 'map' of undefined at Object.<anonymous><C:\Users\etc..
at Module._compile (internal/module/cjs/loader.js1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/run_main_module.js:17:47

提前感谢大家对我的帮助。

我猜您一定是AJAX新手,因为您遗漏了两个重要事实

  • AJAX需要时间
  • AJAX响应总是一个字符串
  • 考虑一下你的片段

    var ourRequest = new XMLHttpRequest();
    ourRequest.open('GET',url,true);   
    //           ^---- doesn't actually send any request https://stackoverflow.com/q/29362977/6160662
    ourRequest.setRequestHeader('X-MBX-APIKEY', keys['APIkey']);
    let arrayCleaned = ourRequest.responseText.balances.map(ele => {  //Line 4
            return {
                "asset" : ele.asset,
                "free" : ele.free
            }
        })
    console.log(arrayCleaned);
    ourRequest.send(); //Line 11
    
    正如您所看到的,您在第11行发送ajax请求,但在第4行尝试操作(预期)数据!因此,错误
    无法读取未定义的at对象的属性“map”

    接下来是我们的请求。responseText是一个属性,它将服务器响应保存在字符串中,但它没有任何属性。因此,您需要使用

    所以这应该很好

    var ourRequest = new XMLHttpRequest();
    ourRequest.open('GET',url,true);
    ourRequest.setRequestHeader('X-MBX-APIKEY', keys['APIkey']);
    
    var arrayCleaned = [];
    ourRequest.onload = function () {
        // Convert data string to an object
        var data = JSON.parse(ourRequest.responseText); // string -->to Object
    
        arrayCleaned = data.balances.map(ele => {
            return {
                "asset" : ele.asset,
                "free" : ele.free
            }
        })
        console.log(arrayCleaned);
    };
    
    ourRequest.send();
    
    您是否尝试使用连接到binance API

    您可以执行以下操作:

    ;(async () => {
        const binance = ccxt.binance ({'apiKey': 'YOURAPIKEY', 'secret': 'YOURSECRET'})
        const balance = await binance.fetchBalance ()
        const free = balance['free']
        console.log (free)
    }) ()
    

    我已经尝试了上面的解决方案,但是我得到了同样的错误。 这是密码

    const crypto = require('crypto');
        var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
        var burl = "https://api.binance.com";
        var endPoint = "/api/v3/account";
        var dataQueryString = "timestamp=" + Date.now();
        var keys = {
            "APIkey" :'AAAAAAAAAAA',
            "SECRETkey" : 'BBBBBBBBBBB'
            }
        var signature = crypto.createHmac('sha256',keys['SECRETkey']).update(dataQueryString).digest('hex');
        var url = burl + endPoint + '?' + dataQueryString + '&signature=' + signature;
        var ourRequest = new XMLHttpRequest();
        ourRequest.open('GET',url,true);
        ourRequest.setRequestHeader('X-MBX-APIKEY', keys['APIkey']);
        var arrayCleaned = [];
        ourRequest.onload = function(){
            //Convert data string string to an object
            var data = JSON.parse(ourRequest.responseText); // string --> to Object
            arrayCleaned = data.balances.map(ele => {
                return {
                    "asset" : ele.asset,
                    "free" : ele.free
                    } 
                 }) 
            console.log(arrayCleaned);
      };
    ourRequest.send();
    
    

    我不知道我是否理解您的问题,但我创建了自己的脚本,用python跟踪我的投资组合。 这可能有助于:

        from binance.client import Client
    
    def editar_df_binance(lista):
        df = pd.DataFrame(lista)
        df["free"] = df["free"].astype(float)  #Convertimos las columnas a valores float
        df["locked"] = df["locked"].astype(float)  #Convertimos las columnas a valores float
        filtro1 = df["free"] > 0
        filtro2 = df["locked"] > 0
        df = df[filtro1 | filtro2]
        df["Fecha"] = hoy
        df = df.rename(columns={"asset": "Moneda", "free": "Saldo", "locked": "Bloqueado"}).sort_values(by="Saldo", ascending=False)  #Renombramos y ordenamos
        df["Moneda"] = df["Moneda"].apply(editar_moneda_binance)  #Vamos a corregir el nombre de las monedas de earn que aparecen con "LD"
        df = df[["Fecha", "Moneda", "Saldo", "Bloqueado"]]
    
        return df
        
    def editar_moneda_binance(moneda):
        if moneda.startswith("LD"):
            return moneda.replace("LD", "")
        return moneda
        
        
    if __name__ == '__main__':
        ###############Balance Binance###################  (Falta la parte de earn)
        api_key = os.environ.get('binance_api')
        api_secret = os.environ.get('binance_secret')
        client = Client(api_key, api_secret)
        diccionario = client.get_account()["balances"]  #Obtener valores de balance
        df_binance = editar_df_binance(diccionario)
    
    然后我用dataframe创建了一个excel文件。
    请不要显示Binance Earn的建议。

    非常感谢,非常感谢。是的,我是AJAX新手,希望能在短时间内熟悉它…
    responseText
    没有属性
    balances
    并写入
    console.log(数据)
    检查控制台中的内容我理解错误所在。出于某种奇怪的原因,我必须将系统时钟与Binance服务器时钟同步。多亏了你的建议,我理解了这一点,事实上,它向我显示了一个同步错误。啊,我明白了,顺便说一句,你能逐字显示你得到了什么样的响应(屏蔽任何可能值得的东西)?{代码:-1021,msg:“这个请求的时间戳比服务器的时间早1000毫秒。”}很好,它是JSON,所以您可以在JSON.parse之后添加一个
    if-else
    语句,这样当我们没有收到预期的内容时,就不会运行
    map
    (但显示警报用户以便我们可以调试)<代码>如果(!data.balances){/*警报('error');*/}否则{/*映射相关代码*/}
        from binance.client import Client
    
    def editar_df_binance(lista):
        df = pd.DataFrame(lista)
        df["free"] = df["free"].astype(float)  #Convertimos las columnas a valores float
        df["locked"] = df["locked"].astype(float)  #Convertimos las columnas a valores float
        filtro1 = df["free"] > 0
        filtro2 = df["locked"] > 0
        df = df[filtro1 | filtro2]
        df["Fecha"] = hoy
        df = df.rename(columns={"asset": "Moneda", "free": "Saldo", "locked": "Bloqueado"}).sort_values(by="Saldo", ascending=False)  #Renombramos y ordenamos
        df["Moneda"] = df["Moneda"].apply(editar_moneda_binance)  #Vamos a corregir el nombre de las monedas de earn que aparecen con "LD"
        df = df[["Fecha", "Moneda", "Saldo", "Bloqueado"]]
    
        return df
        
    def editar_moneda_binance(moneda):
        if moneda.startswith("LD"):
            return moneda.replace("LD", "")
        return moneda
        
        
    if __name__ == '__main__':
        ###############Balance Binance###################  (Falta la parte de earn)
        api_key = os.environ.get('binance_api')
        api_secret = os.environ.get('binance_secret')
        client = Client(api_key, api_secret)
        diccionario = client.get_account()["balances"]  #Obtener valores de balance
        df_binance = editar_df_binance(diccionario)