AEX交易所WSS问题

Author: flyju, Created: 2020-03-20 20:51:12, Updated:

AEX交易所我试了所有文档里的方法都不能用WSS获取数据 获取的数据都是空的 用JSON处理就报错 主要我是个新手 弄了一天了 好累 希望哪个高手能指点我一下 感激不尽! AEX交易所WSS文档 https://github.com/aextech/websocket-api-doc/blob/master/README.md


More

小草 看教程要仔细,例子有很多,另外应该需要海外托管者

小草 /upload/asset/2f6f67e25a076fcecf6.png

小草 测试了一下可以 ``` function main() { var client = Dial("wss://api.aex.zone/ws/v1"); client.write('{"cmd": {"type": 2},"type": 1,"pairs": [{ "market": "cnc", "coin": "btc" }]}') while (true) { var msg = client.read() var data = JSON.parse(msg) //把json字符串解析为可引用的object Log(data) // 处理data数据 } } ```

小草 看了论坛进阶教程了吗,有介绍如何连接

小草 可以

flyju try { data = JSON.parse(msg) } catch (err) { Log(err.message) } 是这样的吗?

小草 可以试试,也可以用try catch 把错误的消息打出来看看

flyju 程序偶尔会出错提示:SyntaxError: invalid json (at offset 1) at main (__FILE__:27) 并中断 根据错误提示应该是 client.read() 获取的data数据出错了 JSON无法处理 我这样写容错可以吗? var data = JSON.parse(msg) if (!data) { data = JSON.parse(msg) }

flyju 用你说的方法搞定了 把我以前REST API的策略改成了 WSS API了 正在跑 就看是否稳定了 真的非常感谢您 您真的太有耐心了 您教会了我很多 再次感谢!

小草 储存数据的,可以理解为字典结构(实际是object)

flyju 哈哈 我明白了 是在判断语句后 把获取的data数据赋值给全局变量data对应的对象是吧?

flyju 抱歉没看懂 设置这个全局变量 data 是干什么用的? data变量的结构对应的是什么?

小草 没那么复杂,在main函数之前设置个全局变量 data = {btc:{buy:0,buyamout:0},eth:{buy:0,buyamout:0}}类似的结构

flyju function main() { var client = Dial("wss://api.aex.zone/ws/v1|reconnect=true"); client.write('{"cmd": {"type": 2},"type": 1,"pairs": [{ "market": "cnc", "coin": "eth" }]}') while (true) { var msg = client.read(); var data = JSON.parse(msg) var type = data.cmd.type if (type === 1) { var CNCBuy = data.bids[0].price var CNCBuyamount = data.bids[0].amount var CNCSell = data.asks[0].price var CNCSellamount = data.asks[0].amount } Log(CNCBuy) /*无法跨域调用变量 而且如果关注多个交易对 还需要判断其它条件才能筛选数据 涉及到后续的交易逻辑判断 需要跨域的变量就更多了 更复杂了 搞了一天了 好累啊*/ } }

小草 先判断if('bids' in data),刚开始可能会返回其他数据,进阶教程里这种例子很多

flyju 无法提取bids数组中的对象 var bids = data.bids[0] 报错 TypeError: cannot read property 0 of undefined at main (__FILE__:9) exchange.GetDepth(); 获取的深度数据都可以

flyju 原来是这样啊 帮了我大忙 非常感谢(鞠躬)AEX官方的文档写的是真的垃圾 说的不明不白的

flyju Log出来的要不是空白 要不就是{} 没有深度数据 文档上也没说数据是压缩的啊 function main() { var client = Dial("wss://api.aex.zone/ws/v1") var msg = client.read() //var data = JSON.parse(msg) Log(client) Log(msg) //Log(data) } client 为空白 msg 为{} 用JSON.parse处理就出错

flyju Log出来的要不是空白 要不就是{} 没有深度数据 文档上也没说数据是压缩的啊

小草 是不是要先关注交易对

小草 检查一下是不是没有更新,都Log出来

flyju 发送请求的都可以 但是深度数据不需要发送数据 文档上说的链接上后就会返回深度数据

flyju 我又根据教程和文档试了 其它的发送命令的都可以 但是获取获取深度数据不需要发送命令 不知道怎么弄

小草 你发送请求了吗

flyju 看了 用Dial 其它的交易所可以链接也可以获取返回数据 AEX可以链接但是返回数据是空的 也无法用JSON处理 我不知道问题出在哪里