اوک ہاتھ آپ کو سکھاتا ہے کہ کس طرح JS کے ساتھ FMZ توسیع API کو جوڑنا ہے

مصنف:اوک کوانٹائزیشن, تخلیق: 2020-05-16 18:04:17, تازہ کاری: 2023-10-24 21:39:10

img

پروفائل

ہیلو، میں وو اوک کوالٹی میک اپ ہوں۔ کچھ عرصے پہلے میں نے مارکیٹ کے رجحانات کو تیار کیا تھا.مانیٹرنگ ڈسکچنگ گوانگ سب کی پسندیدہ ہے ، اور چنگ آک کوالٹی میک اپ کے ساتھ ساتھ اسی نام کے سروس نام کی یاد دہانی بھی ہے ، تاکہ نئے اور پرانے آم کو مارکیٹ کے رجحانات کے بارے میں فیصلہ کرنے میں ایک نیا حوالہ مل سکے۔ اس گرمی کے ذریعہ ، ایف ایم زیڈ کے توسیع API کو جوڑنے کا آغاز کیا گیا ، تاکہ روبوٹ کے مابین پیغام رسانی کو حاصل کیا جاسکے ، اور براہ راست روبوٹ میں مخصوص روبوٹ کو مارکیٹ کی یاد دہانیوں کو آگے بڑھایا جاسکے۔ اس مضمون میں مثال کے طور پر دو ایپلی کیشنز منظرنامے ہیں ، جس کے ذریعہ اس کوڈ کو ہٹا دیا گیا ، امید ہے کہ لوگ زیادہ سے زیادہ تفریحی مشرق وسطی کو تیار کرسکیں...

یہ مضمون بنیادی طور پر مندرجہ ذیل کے بارے میں ہے۔ ایک ، ڈویلپرز کو جے ایس زبان کے ذریعے ایف ایم زیڈ کے لئے توسیع API کو کس طرح جوڑنا ہے۔ مثال نمبر 1: ایک وسیع API کے ساتھ کمانڈ روبوٹ کے طریقہ کار کا استعمال کرتے ہوئے، ڈسک روبوٹ اور دوسرے روبوٹ کے درمیان پیغام رسانی کی نگرانی کرنے کے لئے. مثال نمبر 2: متعدد روبوٹ ڈیٹا کی یکساں نگرانی اور نمائش کے لئے وسیع API کے ساتھ گیٹ روبوٹ تفصیل کا طریقہ استعمال کریں۔

ایک، جے ایس کو جوڑنے کے لئے ایف ایم زیڈ کے لئے توسیع API کا استعمال کریں

1) ،AccessKey اورSecretKey کی درخواست کریں (ہم ذیل میں مختصر طور پر AK،SK کہتے ہیں) ؛ ہم FMZ ویب سائٹ کے ٹول اکاؤنٹ میں سیٹ اپ کرتے ہیں API ٹول - > API ٹول - > API ٹول - > API ٹول کے مینو میں درخواست دیں ، پھر AK ، SK کے ایک سیٹ تک رسائی حاصل کریں اور اسے ریکارڈ کریں۔img

2) ؛ توسیع API کی دستاویزات کے مطابق تیار آئیے پہلے API کی درخواست کرنے کے چند اہم مراحل پر نظر ڈالتے ہیں۔ 1، ایف ایم زیڈ API انٹرفیس:

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

2، بنیادی پیرامیٹرز کی درخواست کریں

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

3، مکمل درخواست یو آر ایل سوال نامہ کے ذریعے منتقل کی شکل میں جڑیں

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

4، دستخط کرنے کا طریقہ

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

5، مجموعی طور پر، مندرجہ ذیل کوڈ ہے ماخذ کا پتہ:ویوک کیوٹیفیکیشن-JS جوڑی FMZ توسیع 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);
}

مثال نمبر 2: روبوٹ کے درمیان پیغام رسانی کے لئے کمانڈ روبوٹ کے طریقہ کار کا استعمال کرتے ہوئے API میں توسیع

مندرجہ بالا کوڈ کی بنیاد پر، ہم نے کمانڈ روبوٹ کے طریقہ کار کا استعمال کرتے ہوئے روبوٹ کے درمیان پیغام رسانی کو لاگو کیا.

سب سے پہلے ہم دو پیرامیٹرز کو دیکھیں گے جو کمانڈ روبوٹ (RobotId، Cmd) کے طریقہ کار کی ضرورت ہے

پیرامیٹر نام اقسام معنی
روبوٹ int روبوٹ کی شناخت، جو گیٹ روبوٹ لسٹ میں حاصل کی جاسکتی ہے یا روبوٹ کی تفصیلات کے صفحے پر حاصل کی جاسکتی ہے۔
سی ایم ڈی تار روبوٹ کو پیغام

اگر آپ کو معلوم ہے کہ آپ کے پاس کیا ہے، تو ہم اس کو استعمال کرنے کے لئے آگے بڑھیں گے۔

روبوٹ کی تفصیلات کے صفحے پر روبوٹ کی شناخت حاصل کریں:img

2، سی ایم ڈی پیغامات حاصل کرنے کا طریقہ کار

//获取消息头信息
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، پیغام بھیجنے کا کوڈ تبدیل کریں

//发送消息前先获取消息
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٬ مین طریقہ کار پر عمل کریں، پیغام بھیجنے کے بعد، پیغام حاصل کرنے کے لئے GetCommand () طریقہ کار کا استعمال کریں

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

پیغام بھیجنے میں کامیابی:imgپیغام موصول ہوا:img

مثال نمبر تین: روبوٹ کی ڈیٹا مانیٹرنگ اور نمائش کے لئے API میں توسیع کے ساتھ گیٹ روبوٹ لسٹ اور گیٹ روبوٹ تفصیل کے طریقوں کا استعمال کریں۔

اسی طرح، ہم پہلے دو طریقوں کے لئے پیرامیٹرز کی وضاحت کرتے ہیں. GetRobotList ((offset, length, robotStatus, label): روبوٹ کی فہرست حاصل کریں

پیرامیٹر نام اقسام معنی
آفسیٹ int صفحہ کا کوڈ
لمبا int صفحہ کی ڈیٹا کی لمبائی
روبوٹاسٹیٹس int 1 کو منتقل کریں، تمام کو حاصل کریں
لیبل تار اپنی مرضی کے مطابق ٹیگ، اس ٹیگ کے ساتھ تمام روبوٹ کو فلٹر کرنے کے لئے

GetRobotDetail(RobotId):

پیرامیٹر نام اقسام معنی
روبوٹ int روبوٹ آئی ڈی

1، روبوٹ کی فہرست حاصل کرنے کے لئے GetRobotList کا استعمال کریں

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

2، روبوٹ کی تفصیلات حاصل کریں

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

3، کنٹرولر آؤٹ پٹ ٹیبل ڈیٹا

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

4، مجموعی طور پر، مندرجہ ذیل کوڈ ہیں: ماخذ کا پتہ:ووک کیوٹیفیکیشن - روبوٹ سے معلومات حاصل کرنے اور دکھانے کے لئے ایک توسیع API کا استعمال کرتے ہوئے

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

اس کا اثر:

img

اختتام

عملی توسیع میں ، مزید تفریحی خصوصیات کو بھی حاصل کیا جاسکتا ہے۔ مثال کے طور پر ، کمانڈ روبوٹ کے طریقہ کار کا استعمال کرتے ہوئے ، ہر روبوٹ کو روبوٹ اے کو دل کی دھڑکن کی جانچ پڑتال بھیجنے کی اجازت دی جاتی ہے ، اگر روبوٹ اے نے کسی مشین کا پتہ لگایا ہے کہ اس کا دل کی دھڑکن نہیں ہے ، لیکن روبوٹ ابھی بھی چل رہا ہے تو ، وہ FMZ سروس نمبر کے ذریعہ الارم دے سکتا ہے۔ اس طرح ، الارم سے بچنے کے لئے ، مثال کے طور پر ، _C () موت کا دورانیہ ، جس کی وجہ سے پروگرام کی موت کا منظر پیش ہوتا ہے۔ امید ہے کہ میرے اس اشارے کے ذریعے ایف ایم زیڈ پلیٹ فارم میں مزید ، زیادہ تفریحی خصوصیات ہوں گی جو آپ سب کے ذریعہ تیار کی جائیں گی ، اوپن سورس۔ آخر میں ، میں ایف ایم زیڈ پلیٹ فارم کے ساتھ ساتھ ڈرامہ ، سپر ، زیڈ وغیرہ کی حمایت اور مدد کے لئے آپ کا شکریہ ادا کرتا ہوں۔


متعلقہ

مزید

موجد نمبر ایکشوکانگ

ہاہاہاجمع کرنا، سیکھنا