Oker menolong anda menggunakan API penyebaran FMZ untuk menghubungkan JS

Penulis:Ukuran ok, Dicipta: 2020-05-16 18:04:17, Dikemas kini: 2023-10-24 21:39:10

img

Keterangan

Halo, saya adalah Liu Ok Quantitative Makeup. Oleh kerana beberapa waktu yang lalu, saya telah membangunkan tren pasaran yang mengingatkan anda.Pengendalian cakera besarYang Guang adalah kegemaran semua orang, dan mempunyai peringatan serentak dengan nama perkhidmatan yang sama, untuk memberi rujukan baru kepada trend pasaran. Dengan ini, panas, mula mengaitkan API sambungan FMZ, untuk mencapai komunikasi mesej antara bot, dan terus mendorong peringatan pasaran ke dalam bot yang ditentukan. Contoh dua senario aplikasi dalam artikel ini, dengan ini, membuang batu akik, berharap orang ramai dapat mengembangkan lebih banyak yang menyeronokkan Timur Timur...

Artikel ini memaparkan: 1. bagaimana pemaju menggunakan bahasa JS untuk menyambungkan FMZ dengan API pelanjutan;; (ini adalah contoh kaedah GetNodeList) Contoh 1: Menggunakan kaedah CommandRobot dengan API yang diperluaskan untuk memantau komunikasi mesej antara bot besar dan bot lain. 3. Kes 2: Menggunakan kaedah GetRobotDetail dengan API yang diperluaskan untuk mencapai pemantauan dan paparan data berbilang robot secara serentak.

Pertama, menggunakan API lanjutan untuk FMZ yang dipasangkan JS

1), memohon AccessKey dan SecretKey (di bawah ini kami akan menyingkatnya sebagai AK, SK) ; Kami membuat permohonan di menu API API baru, dan kemudian mendapatkan sekumpulan AK, SK dan mencatatnya.img

2), dibangunkan berdasarkan dokumen API pelanjutan Pertama, mari kita lihat beberapa langkah penting untuk meminta API. 1, FMZ API:

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

2. Minta parameter asas

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

3, URL permintaan lengkap diletakkan dalam bentuk rujukan nombor 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, secara keseluruhan, mempunyai kod berikut: Alamat sumber:Pengukuran kuantitatif JS-JS untuk pairing FMZ Extension API

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

Kes 2: Menggunakan kaedah CommandRobot yang menggunakan API yang diperluaskan untuk mencapai komunikasi mesej antara bot

Berdasarkan kod di atas, kami menggunakan kaedah CommandRobot untuk mencapai komunikasi mesej antara bot.

Pertama, mari kita lihat dua parameter yang diperlukan oleh kaedah CommandRobot (RobotId, Cmd)

Nama parameter Jenis Makna
RobotId int ID bot, boleh didapati dengan GetRobotList (....) atau di halaman butiran bot
Cmd String Mesej yang dihantar kepada robot

Jika kita tahu apa yang dimaksudkan dengan parameter, maka kita akan mula menggunakan kaedah panggilan ini.

1, cari ID bot di halaman butiran bot:img

2, Memahami cara untuk mendapatkan mesej 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 kod untuk menghantar mesej

//发送消息前先获取消息
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. Melakukan kaedah utama, selepas menghantar mesej, menggunakan kaedah GetCommand ((() untuk mendapatkan mesej

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

Mesej berjaya:imgMesej diterima berjaya:img

Contoh 3: Pemantauan dan penayangan data bot menggunakan kaedah GetRobotList dan GetRobotDetail API yang diperluaskan.

Jadi, kita akan lihat cara yang sama, dan kita akan lihat cara kedua. GetRobotList ((offset, length, robotStatus, label):

Nama parameter Jenis Makna
penyesuaian int Kod halaman yang diminta
panjang int Panjang data halaman permintaan
robotStatus int Pesan 1 untuk mendapatkan semua
label String Tag tersuai, boleh menyaring semua bot yang mempunyai tag ini

GetRobotDetail(RobotId):

Nama parameter Jenis Makna
RobotId int ID bot

1. Dapatkan senarai robot menggunakan kaedah GetRobotList

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

2. Dapatkan maklumat terperinci mengenai robot

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

3. Pengendali mengeluarkan data borang

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

4. Secara keseluruhan, terdapat kod berikut: Alamat sumber:Quantified Fluoride - menggunakan API yang diperluaskan untuk mendapatkan maklumat bot dan memaparkannya

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

Perkataan akhir

Fungsi yang lebih menyeronokkan juga dapat dicapai dalam pengembangan sebenar. Sebagai contoh, menggunakan kaedah CommandRobot yang membolehkan setiap robot menghantar ujian denyutan jantung kepada robot A, jika robot A mendapati bahawa mesin tidak mempunyai denyutan jantung, tetapi robot itu masih berfungsi, maka ia boleh memberi amaran melalui nombor perkhidmatan FMZ. Saya berharap bahawa dengan penyampaian saya, FMZ akan mempunyai lebih banyak, lebih menyeronokkan fungsi yang dibangunkan oleh semua orang, sumber terbuka. Terakhir, terima kasih kepada platform FMZ dan sokongan dan bantuan anda semua.


Berkaitan

Lebih lanjut

Pencipta No.1shoucang

TnmmhmMengumpul, Belajar