Javascript API二进制获得自由平衡
我是API新手,非常感谢您的建议。 我想回忆一下Binance API“GET/API/v3/account(HMAC SHA256)”,只获取我帐户上可用的免费资产 我得到的代码是这样的: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
{
"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新手,因为您遗漏了两个重要事实
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)