Oker handshake mengajarkan Anda menggunakan JS untuk menghubungkan FMZ ekstensi API

Penulis:Ukuran ok, Dibuat: 2020-05-16 18:04:17, Diperbarui: 2023-10-24 21:39:10

img

Daftar

Halo, saya adalah Liu Oak Quantitative Makeup. Karena beberapa waktu yang lalu saya telah mengembangkan tren pasar yang mengingatkan Anda.Pemasok monitorYang Guang sangat disukai oleh semua orang, dan memiliki pengingat sinkronisasi dengan merek layanan yang sama, yang memberi referensi baru bagi orang tua baru untuk menilai tren pasar. Dengan panas ini, mulailah menghubungkan API ekstensi FMZ, untuk mewujudkan komunikasi pesan antara robot, dan langsung mendorong pengingat pasar ke robot yang ditentukan.

Artikel ini membahas tentang: Pertama, bagaimana pengembang menghubungkan FMZ dengan API ekstensi bahasa JS. Kedua, contoh 1: Menggunakan metode CommandRobot dengan API yang diperluas untuk memantau komunikasi pesan antara robot besar dan robot lain. Kasus III, Kasus II: Menggunakan metode GetRobotDetail dengan API ekstensif untuk memungkinkan pemantauan dan tampilan data seragam dari beberapa robot.

Pertama, menggunakan API ekstensi untuk FMZ yang dipasangkan JS

1)  Menggunakan AccessKey dan SecretKey (di bawah ini kami akan menyingkatnya sebagai AK, SK)  Kami membuat aplikasi di menu API API baru, kemudian mendapatkan ke kumpulan AK, SK dan merekamnya.img

2) Mengembangkan berdasarkan dokumentasi API ekstensi Pertama, kita akan melihat beberapa langkah penting untuk meminta API. 1, FMZ API:

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

2, meminta parameter dasar

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

3, URL permintaan lengkap yang dituliskan dalam bentuk rujukan tanda tanya

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

4 Cara menandatangani

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

5, yang memiliki kode sebagai berikut: Sumbernya di:Java-JS Pairing FMZ Extension API Demo

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);
}

Kasus II: Menggunakan metode CommandRobot dengan API yang diperluas untuk melakukan komunikasi pesan antara robot

Berdasarkan kode di atas, kami menggunakan metode CommandRobot untuk melakukan komunikasi pesan antara robot.

Pertama, mari kita lihat dua parameter yang dibutuhkan oleh metode CommandRobot (RobotId, Cmd).

Nama parameter Jenis Makna
RobotId int ID bot, dapat diperoleh dengan GetRobotList (...) atau di halaman detail bot
Cmd String Pesan yang dikirim ke robot

Setelah mengetahui apa yang dimaksud dengan parameter, maka kita akan melanjutkan dengan implementasi metode panggilan ini.

Untuk mendapatkan ID robot, lihat halaman detail bot:img

2 ̊ Mengimplementasikan metode untuk mendapatkan pesan 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. Mengubah kode untuk mengirim pesan

//发送消息前先获取消息
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. Mengikuti metode main, setelah mengirim pesan, menggunakan metode GetCommand( untuk mendapatkan pesan

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

"Sudah berhasil mengirim pesan:img"Sudah tidak bisa dihubungi lagi", katanya.img

Contoh 3: Menggunakan metode GetRobotList dan GetRobotDetail API yang diperluas untuk memantau dan menampilkan data robot.

Jadi kita akan melihat bagaimana cara ini bekerja, dan kita akan melihat bagaimana cara ini bekerja. GetRobotList (offset, length, robotStatus, label):

Nama parameter Jenis Makna
penghapusan int Kode halaman yang diminta
panjang int Panjang data halaman permintaan
robotStatus int Transmit-1 akan mendapatkan semua
label String Tag kustom, yang dapat menyaring semua bot dengan tag ini

GetRobotDetail ((RobotId):

Nama parameter Jenis Makna
RobotId int ID Robot

1. Dapatkan daftar robot menggunakan metode GetRobotList

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

2. Mendapatkan informasi lebih lanjut tentang robot

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

3, output data tabel dari console

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

4, secara keseluruhan, memiliki kode sebagai berikut: Sumbernya:VOC Quantum - Menggunakan API ekstensi untuk mengambil informasi dari robot dan menampilkan

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;
}

Hasilnya:

img

Pengucapan

Dalam ekstensi yang sebenarnya, lebih banyak fungsi yang lebih menyenangkan dapat dicapai. Misalnya, menggunakan metode CommandRobot yang memungkinkan setiap robot untuk mengirim deteksi detak jantung ke robot A, jika robot A menemukan bahwa mesin tidak memiliki detak jantung, tetapi robot masih berjalan, maka robot dapat memberikan alarm melalui nomor layanan FMZ. Dengan demikian, alarm yang menyebabkan skenario kematian simulasi program, seperti _C (dead loop) dapat dihindari. Saya berharap dengan cara ini, platform FMZ dapat memiliki lebih banyak, lebih menyenangkan, dan lebih banyak fitur yang dikembangkan oleh semua orang, sumber terbuka. Terakhir, terima kasih atas dukungan dan bantuan dari platform FMZ dan semua dewa besar seperti Dream Team, Super Team, dan Z. Terima kasih.


Berkaitan

Lebih banyak

Penemu No. 1shoucang

TnmmhKoleksi, Belajar