El hombre de Oak te enseñará cómo usar la API para la extensión de FMZ con JS.

El autor:Cuantificación de orcs, Creado: 2020-05-16 18:04:17, Actualizado: 2023-10-24 21:39:10

img

Descripción

Hola, soy el maquillaje cuantificado de Vaucluse.El monitor de la gran pantallaEl juego es muy popular y tiene un aviso simultáneo con el nombre del servicio de maquillaje cuantitativo de Vaucluse, para que los nuevos y viejos calamares tengan una nueva referencia en el juicio de la tendencia del mercado. Con este calor, comenzamos a conectar la API de expansión de FMZ para realizar la comunicación de mensajes entre los robots y enviar directamente el aviso al robot especificado.

Este artículo se centra en: ¿Cómo los desarrolladores pueden usar el lenguaje JS para conectar la API de extensión de FMZ? El primer caso es el uso de un método de CommandRobot con una API extendida para monitorear la comunicación de mensajes entre un robot de disco grande y otros robots. Caso 2: El método GetRobotDetail, que utiliza una API extendida, permite un monitoreo y una presentación unificados de datos de varios robots.

Primero, el uso de la API de extensión de FMZ para el enlace JS

1), solicita AccessKey y SecretKey ((en adelante se abreviará como AK, SK) ). En FMZ, la aplicación se establece en el menú de la API API API API API API API API Crear una nueva APIKey, y luego se accede a un conjunto de AK, SK y se registra.img

2) Desarrollado según la documentación de la API de extensión Para empezar, vamos a ver algunos pasos clave para solicitar una API. En la actualidad, la mayoría de los usuarios de FMZ están conectados a la red.

https://www.fmz.com/api/v1

2, solicita los parámetros básicos

{
    'version'   : '1.0',                                //自定义版本号
    'access_key': '8a148320e0bxxxxxxxxxxxxxx19js99f',   //AK
    'method'    : 'GetNodeList',                        //具体调用的方法
    'args'      : [],                                   //具体method算法的参数列表
    'nonce'     : 1516292399361,                        //时间戳,单位毫秒
    'sign'      : '085b63456c93hfb243a757366600f9c2'    //签名(需要根据上面5个参数加密获取,下面有讲)
}

3, URL de petición completa con el número de pregunta de la hoja de cálculo

以GetNodeList方法为例
https://www.fmz.com/api/v1?
access_key=8a148320e0bxxxxxxxxxxxxxx19js99f&
nonce=1516292399361&
args=%5B%5D&
sign=085b63456c93hfb243a757366600f9c2&
version=1.0&
method=GetNodeList

4. Cómo firmar

按照如下顺序进行参数拼接后,使用MD5加密算法加密字符串,并转换为十六进制数据字符串值,该值作为参数sign的值。
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey

5. En resumen, tiene los siguientes códigos: El código fuente:Prueba de API ampliada para el emparejamiento de JS-JS con FMZ

var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//这里替换成你自己的AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//这里替换成你自己的SecretKey

function main() {
    //获取5个基础参数对象
    var param = getParam("1.0.0",AK,getArgs());
    Log("param:",param);
    //获取拼接参数md5加密后的结果
    var md5Result = md5(param);
    //赋值加密结果到基础参数对象中
    param.sign = md5Result;
    //获取请求api的URL
    var finalUrl = getFinalUrl(param);
    Log("finalUrl:",finalUrl);
    //执行请求并打印结果
    var info = HttpQuery(finalUrl);
    Log("info:",info);
}

//获取基础5个参数的对象
function getParam(version,ak,args){
    return {
        'version': version,
        'access_key': ak,
        'method': 'GetNodeList',
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

//执行md5加密
function md5(param){
    var paramUrl = param.version+"|"+param.method+"|"+param.args+"|"+param.nonce+"|"+SK
    Log("paramUrl:",paramUrl);
    return Hash("md5", "hex", paramUrl)
}

//获取最终请求URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//js中不支持...args的命名方式,所以改用arguments关键字获取参数数组
function getArgs(){
    return [].slice.call(arguments);
}

Caso 2: Comunicación de mensajes entre robots mediante el método CommandRobot con API extendida

Basándonos en el código anterior, utilizamos el método CommandRobot para realizar la comunicación de mensajes entre robots.

Primero vamos a ver los dos parámetros que requiere el método CommandRobot (RobotId, Cmd).

Nombre del parámetro Tipo de trabajo Significado
El robot Int Identificación del robot, obtenida en GetRobotList (...), o en la página de detalles del robot
El Cmd Cuadrícula Los mensajes enviados a los robots

Ahora que sabemos lo que significan los parámetros, vamos a implementar este método de llamada.

En la página de detalles del robot, puedes acceder al ID del robot:img

2, Cómo obtener mensajes de cmd

//获取消息头信息
function getMessageBody(toUserName,msgType,content){
    return ({
        "toUserName":toUserName,//发送给谁
        "fromUserName":AOKE_INFO,//消息来源
        "createTime": new Date().getTime(),//当前时间戳
        "msgType":msgType,//消息类型
        "content":content,//消息内容
        "msgId":Math.random().toString(36).slice(-8)//消息ID
    })
}

//获取消息体趋势信息(消息头content字段的数据)
function getCtaDate(symbol,timeCycle,direction,nowCycleTime){
    return {
        "symbol":symbol,//交易币种
        "timeCycle":timeCycle,//趋势周期
        "direction":direction,//当前进入的方向,0:看空,1:看多
        "createTime":new Date().getTime(),//当前时间戳
        "nowCycleTime":nowCycleTime//当前进入的周期起始时间
    }
}

3. Modificar el código de envío del mensaje

//发送消息前先获取消息
var sendMessage = getMessageBody("测试对象",'CTARemind',getCtaDate('BTC_USDT','120','0','2020-05-1620:00:00'));

//把机器人ID和消息体通过getArgs()方法获取,并传入基础参数。
var param = getParam("1.0.0",AK,getArgs(17777,sendMessage));

4、 ejecutar el método main, después de enviar el mensaje, utilizar el método GetCommand( para obtener el mensaje

function main(){
    while(true) { 
        var cmd = GetCommand()
        if (cmd) { 
            Log(cmd)
        }
        Sleep(1000) 
    }
}

El mensaje fue enviado con éxito:imgEl mensaje fue recibido con éxito:img

Caso 3: El método GetRobotList y GetRobotDetail de las API ampliadas permite la monitorización y visualización de datos de los robots.

De la misma manera, vamos a ver los parámetros de las dos formas. GetRobotList ((offset, length, robotStatus, label)): El sitio web de GetRobot está disponible para todos los usuarios.

Nombre del parámetro Tipo de trabajo Significado
de desplazamiento Int Código de página de la consulta
longitud Int Duración de datos de la página de consulta
robotEstado Int Transmisión 1 para obtener todo
etiqueta Cuadrícula Etiquetas personalizadas que pueden filtrar todos los robots con esta etiqueta

GetRobotDetail ((RobotId)): el nombre del robot

Nombre del parámetro Tipo de trabajo Significado
El robot Int Identificación del robot

1. Obtener una lista de robots con el método GetRobotList

//获取机器人列表信息
var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
var robotList = robotListJson.data.result.robots;

2. Obtener información sobre el robot

//获取机器人详情信息
var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
var robotDetail = robotDetailJson.data.result.robot;

3, el panel de control para obtener los datos de la tabla

function getLogPrient(infoArr){
    return table = {
            type: 'table',
            title: '奥克量化的机器人展示',
            cols: ['机器人ID','机器人名称','策略名称','下次扣费时间','已经消耗时间ms','已经消耗金额CNY','最近活跃时间','是否公开'],
            rows: infoArr
        };
}

4. En resumen, tiene los siguientes códigos: El código fuente:Cuantitativo de Java - utiliza una API extendida para obtener información del robot y mostrarla

var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//这里替换成你自己的AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//这里替换成你自己的SecretKey
var OFF_SET = 0;//查询的页码下标
var PAGE_LENGTH = 5;//查询页的数据长度

function main() {
    LogReset();
    while(true){
        //获取机器人列表信息
        var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
        //取出机器人列表信息
        var robotList = robotListJson.data.result.robots;
        //创建展示机器人信息的数组
        var infoArr = new Array();
        var infoArr_index = 0;
        for (index = 0; index < robotList.length; index++) {
            var robot = robotList[index];
            //取出当前循环到的机器人ID
            var robotId = robot.id;
            //获取机器人详情信息
            var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
            var robotDetail = robotDetailJson.data.result.robot;
            //转换详情为数组对象
            var arr = getLogPrientItem(robotDetail);
            infoArr[infoArr_index] = arr;
            infoArr_index++;
        }
        Log("infoArr:",infoArr);
        LogStatus('`' + JSON.stringify(getLogPrient(infoArr)) + '`');
        Sleep(30000);
    }
}

function getLogPrient(infoArr){
    return table = {
            type: 'table',
            title: '奥克量化的机器人展示',
            cols: ['机器人ID','机器人名称','策略名称','下次扣费时间','已经消耗时间ms','已经消耗金额CNY','最近活跃时间','是否公开'],
            rows: infoArr
        };
}

//通过参数获取API信息
function getAPIInfo(method,dateInfo){
    //获取5个基础参数对象
    var param = getParam("1.0.0",AK,method,dateInfo);
    //Log("param:",param);
    //获取拼接参数md5加密后的结果
    var md5Result = md5(param);
    //赋值加密结果到基础参数对象中
    param.sign = md5Result;
    //获取请求api的URL
    var finalUrl = getFinalUrl(param);
    //Log("finalUrl:",finalUrl);
    //执行请求并打印结果
    var info = HttpQuery(finalUrl);
    //Log("info:",info);
    return JSON.parse(info);
}

//获取基础5个参数的对象
function getParam(version,ak,method,args){
    return {
        'version': version,
        'access_key': ak,
        'method': method,
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

//执行md5加密
function md5(param){
    var paramUrl = param.version+"|"+param.method+"|"+param.args+"|"+param.nonce+"|"+SK
    //Log("paramUrl:",paramUrl);
    return Hash("md5", "hex", paramUrl)
}

//获取最终请求URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//js中不支持...args的命名方式,所以改用arguments关键字获取参数数组
function getArgs(){
    return [].slice.call(arguments);
}

//获取展示详情对象'机器人ID','机器人名称','策略名称','下次扣费时间','已经消耗时间ms','已经消耗金额CNY','最近活跃时间','是否公开'],
function getLogPrientItem(robotDetail){
    var itemArr = new Array();
    var iteArr_index = 0;
    itemArr[iteArr_index++] = robotDetail.id;
    itemArr[iteArr_index++] = robotDetail.name;
    itemArr[iteArr_index++] = robotDetail.strategy_name;
    itemArr[iteArr_index++] = robotDetail.charge_time;
    itemArr[iteArr_index++] = robotDetail.charged;
    itemArr[iteArr_index++] = robotDetail.consumed/1e8;
    itemArr[iteArr_index++] = robotDetail.refresh;
    itemArr[iteArr_index++] = robotDetail.public == 0?"已公开":"未公开";
    return itemArr;
}

Los resultados muestran:

img

Las palabras finales

En la extensión real, también se pueden realizar muchas funciones más divertidas. Por ejemplo, el uso del método CommandRobot permite que cada robot envíe una detección de la frecuencia cardíaca a robot A, y si el robot A detecta que una máquina no tiene un pulso cardíaco, pero el robot todavía está en funcionamiento, puede ser alertado con el número de servicio FMZ. De esta manera, se puede evitar una alarma que causa una escena de muerte simulada de programas, como el ciclo de muerte de _C (). Espero que con este lanzamiento de mi pieza, la plataforma FMZ pueda tener más funciones, más divertidas, desarrolladas y con código abierto. Por último, gracias a la plataforma FMZ y a todos los dioses del mundo por su apoyo y ayuda.


Relacionados

Más.

El inventor No. 1el chaco

¿Qué quieres decir?La colección, el aprendizaje