我是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"
]
}
我只想要自由结余,因此我尝试使用MAP方法,但出现此错误:
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
遵循我的代码:
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" :'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
"SECRETkey" : 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
}
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']);
let arrayCleaned = ourRequest.responseText.balances.map(ele => {
return {
"asset" : ele.asset,
"free" : ele.free
}
})
console.log(arrayCleaned);
ourRequest.send();
在此先感谢大家的帮助。
答案 0 :(得分:0)
我猜您必须是AJAX的新手,因为您缺少2个重要事实
考虑您的代码段
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行处理(预期)数据!因此出现错误Cannot read property 'map' of undefined at Object
接下来的事情是ourRequest.responseText
是将服务器响应保存在 string 中的属性,它没有任何map属性。因此,您需要使用JSON.parse()
所以这应该很好
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();
答案 1 :(得分:0)
您是否尝试过使用CCXT连接到币安API?
您可以执行以下操作:
;(async () => {
const binance = ccxt.binance ({'apiKey': 'YOURAPIKEY', 'secret': 'YOURSECRET'})
const balance = await binance.fetchBalance ()
const free = balance['free']
console.log (free)
}) ()
答案 2 :(得分:0)
我不知道我是否理解您的问题,但我创建了自己的脚本来使用 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)
然后我用数据框创建一个excel文件。 请注意不显示 Binance Earn。
答案 3 :(得分:-1)
我已经尝试了上面的解决方案,但是遇到了同样的错误。 这里的代码
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();