Oak আপনি FMZ বর্ধিত API এর সাথে ইন্টারফেস করতে JS ব্যবহার করতে শেখায়

লেখক:লিডিয়া, তৈরিঃ ২০২২-১২-২০ 13:27:24, আপডেটঃ ২০২৩-০৯-২০ 11:12:14

img

Oak আপনি FMZ বর্ধিত API এর সাথে ইন্টারফেস করতে JS ব্যবহার করতে শেখায়

পরিচিতি

হ্যালো সবাই, আমি ওক কোয়ান্ট। বাজারের প্রবণতা অনুস্মারক কারণে আমি কিছু সময় আগে উন্নতবাজার পর্যবেক্ষণ, যা জনপ্রিয়, এবং একই নামের পরিষেবা নম্বরটির একটি সিঙ্ক্রোনস অনুস্মারক রয়েছে, যা নতুন এবং পুরানো ব্যবহারকারীদের বাজারের প্রবণতা বিচার করার ক্ষেত্রে একটি নতুন রেফারেন্স দেয়। এই উত্তাপের সুবিধা নিতে, আমরা রোবটগুলির মধ্যে বার্তা যোগাযোগ অর্জনের জন্য FMZ এর বর্ধিত এপিআই ডক করতে শুরু করেছি এবং সরাসরি মনোনীত রোবটগুলিতে বাজার সতর্কতা চালিয়েছি। এই নিবন্ধটি উদাহরণ হিসাবে দুটি অ্যাপ্লিকেশন দৃশ্যকল্প গ্রহণ করে এবং আশা করে যে আপনি আরও আকর্ষণীয় জিনিস বিকাশ করতে পারেন...

এই প্রবন্ধে মূলত নিম্নলিখিত বিষয়গুলো তুলে ধরা হয়েছে:

  1. কিভাবে ডেভেলপাররা জেএস ভাষার মাধ্যমে এফএমজেড এক্সটেন্ডেড এপিআইগুলির সাথে ইন্টারফেস করে? (এই নিবন্ধটি উদাহরণ হিসাবে গেটনোডলিস্ট পদ্ধতি গ্রহণ করে)
  2. কেস ১ঃ মনিটরিং রোবট এবং অন্যান্য রোবটগুলির মধ্যে বার্তা যোগাযোগ বাস্তবায়নের জন্য বর্ধিত এপিআইয়ের কমান্ড রোবট পদ্ধতি ব্যবহার করুন।
  3. কেস ২ঃ একাধিক রোবট ডেটার একক পর্যবেক্ষণ এবং প্রদর্শন উপলব্ধি করতে বর্ধিত এপিআইয়ের GetRobotDetail পদ্ধতি ব্যবহার করুন।

1. FMZ এর বর্ধিত API এর সাথে ইন্টারফেস করার জন্য JS ব্যবহার করুন

১) অ্যাক্সেসকি এবং সিক্রেটকি (এখন থেকে একে এবং এসকে বলা হবে) এর জন্য আবেদন করুন। আমরা এফএমজেডের অফিসিয়াল ওয়েবসাইটে [অ্যাকাউন্ট] -> [এপিকি] -> [নতুন এপিকি তৈরি করুন] মেনুতে আবেদন করি এবং তারপরে একে এবং এসকে একটি গ্রুপ সংগ্রহ এবং রেকর্ড করি। (একে এবং এসকে এফএমজেডে দৃশ্যমান, আমরা যে কোনও সময় [এপিআই ইন্টারফেস] মেনুতে একে এবং এসকে এর সম্পূর্ণ ডেটা দেখতে পারি) ।

img

২) সম্প্রসারিত এপিআই নথির মতে বিকাশ করুন প্রথমত, আসুন অনুরোধ এপিআই এর মূল ধাপগুলো দেখে নিই।

  1. এফএমজেড এপিআই ইন্টারফেসঃ
https://www.fmz.com/api/v1
  1. অনুরোধের মৌলিক পরামিতি
{
    'version'   : '1.0',                                //Custom version number
    'access_key': '8a148320e0bxxxxxxxxxxxxxx19js99f',   //AK
    'method'    : 'GetNodeList',                        //The specific method to call
    'args'      : [],                                   //List of parameters for the specific method algorithm
    'nonce'     : 1516292399361,                        //Timestamp, in milliseconds
    'sign'      : '085b63456c93hfb243a757366600f9c2'    //Signature (need to be encrypted according to the above 5 parameters to obtain, as discussed below)
}
  1. সম্পূর্ণ অনুরোধ URL প্রশ্ন চিহ্ন এবং পরামিতি পাস আকারে spliced হয়
Take the GetNodeList method as an example:
https://www.fmz.com/api/v1?
access_key=8a148320e0bxxxxxxxxxxxxxx19js99f&
nonce=1516292399361&
args=%5B%5D&
sign=085b63456c93hfb243a757366600f9c2&
version=1.0&
method=GetNodeList
  1. স্বাক্ষর পদ্ধতি
After the parameters are spliced in the following order, the MD5 encryption algorithm is used to encrypt the string and convert it to a hexadecimal data string value, which is used as the value of the parameter sign.
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
  1. সংক্ষেপে, নিম্নলিখিত কোড পাওয়া যায় উৎস কোড ঠিকানাঃ[Oak Quant] - JS ডকিং FMZ বর্ধিত API ডেমো
var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//Replace here with your own AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//Replace here with your own SecretKey

function main() {
    //Get 5 basic parameter objects
    var param = getParam("1.0.0",AK,getArgs());
    Log("param:",param);
    //Get the result after md5 encryption of splicing parameters
    var md5Result = md5(param);
    //Assign the encryption result to the basic parameter object
    param.sign = md5Result;
    //Get the URL of the request api
    var finalUrl = getFinalUrl(param);
    Log("finalUrl:",finalUrl);
    //Execute the request and print the results
    var info = HttpQuery(finalUrl);
    Log("info:",info);
}

//Get 5 basic parameter objects
function getParam(version,ak,args){
    return {
        'version': version,
        'access_key': ak,
        'method': 'GetNodeList',
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

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

//Get the final request URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//The naming method of... args is not supported in js, so the arguments keyword is used instead to obtain the parameter array
function getArgs(){
    return [].slice.call(arguments);
}

কেস ২ঃ রোবটগুলির মধ্যে বার্তা যোগাযোগ অর্জনের জন্য বর্ধিত এপিআইয়ের কমান্ড রোবট পদ্ধতি ব্যবহার করা

উপরের কোডের উপর ভিত্তি করে, আমরা কমান্ড রোবট পদ্ধতি ব্যবহার করব রোবটগুলির মধ্যে বার্তা যোগাযোগ অর্জনের জন্য।

প্রথমে, আসুন CommandRobot (RobotId, Cmd) পদ্ধতির জন্য প্রয়োজনীয় দুটি পরামিতিগুলি দেখুনঃ

প্যারামিটারের নাম প্রকার অর্থ
RobotId int রোবট আইডি, যা GetRobotList (...) বা রোবট বিস্তারিত পৃষ্ঠায় পাওয়া যাবে
সিএমডি স্ট্রিং রোবটকে বার্তা পাঠানো হয়েছে

এখন যেহেতু আমরা প্যারামিটারের অর্থ জানি, আসুন কলিং পদ্ধতিটি বাস্তবায়ন করি।

  1. রোবটের তথ্যের পাতায় রোবট আইডি পান

  2. সিএমডি বার্তা প্রাপ্তির পদ্ধতি বাস্তবায়ন করুন

//Get message header information
function getMessageBody(toUserName,msgType,content){
    return ({
        "toUserName":toUserName,//Who to send to
        "fromUserName":AOKE_INFO,//Source
        "createTime": new Date().getTime(),//Current timestamp
        "msgType":msgType,//Message Type
        "content":content,//Message content
        "msgId":Math.random().toString(36).slice(-8)//Message ID
    })
}

//Get message body trend information (data of message header content field)
function getCtaDate(symbol,timeCycle,direction,nowCycleTime){
    return {
        "symbol":symbol,//Trading currency
        "timeCycle":timeCycle,//Trend cycle
        "direction":direction,//Current entry direction, 0: berish, 1: bullish
        "createTime":new Date().getTime(),//Current timestamp
        "nowCycleTime":nowCycleTime//Start time of current cycle
    }
}
  1. বার্তা পাঠানোর কোড পরিবর্তন করুন
//Get messages before sending them
var sendMessage = getMessageBody("Test object",'CTARemind',getCtaDate('BTC_USDT','120','0','2020-05-1620:00:00'));

//Get the robot ID and message body through the getArgs() method, and pass in the basic parameters.
var param = getParam("1.0.0",AK,getArgs(17777,sendMessage));
  1. প্রধান পদ্ধতি চালান. বার্তা পাঠানোর পরে, বার্তা পেতে GetCommand() পদ্ধতি ব্যবহার করুন
function main(){
    while(true) { 
        var cmd = GetCommand()
        if (cmd) { 
            Log(cmd)
        }
        Sleep(1000) 
    }
}

বার্তা সফলভাবে পাঠানো হয়েছেঃ

img

বার্তা সফলভাবে গৃহীত হয়েছেঃ

img

কেস ৩ঃ রোবটগুলির ডেটা মনিটরিং এবং প্রদর্শন বাস্তবায়নের জন্য বর্ধিত এপিআইয়ের GetRobotList এবং GetRobotDetail পদ্ধতি ব্যবহার করুন।

একইভাবে, আসুন প্রথমে পরবর্তী দুটি পদ্ধতির প্যারামিটার বর্ণনাগুলি দেখুন GetRobotList ((অফসেট, দৈর্ঘ্য, robotStatus, লেবেল):

প্যারামিটারের নাম প্রকার অর্থ
অপসারণ int অনুসন্ধানের পৃষ্ঠার সংখ্যা
লম্বা int অনুসন্ধান পৃষ্ঠার ডেটা দৈর্ঘ্য
রোবটStatus int পাস ইন - 1 সব পেতে
লেবেল স্ট্রিং কাস্টমাইজড ট্যাগ এই ট্যাগ দিয়ে সমস্ত রোবট ফিল্টার করতে পারেন

GetRobotDetail ((রোবটআইডি):

প্যারামিটারের নাম প্রকার অর্থ
RobotId int রোবট আইডি
  1. GetRobotList পদ্ধতির মাধ্যমে রোবট তালিকা পান
//Get robot list information
var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
var robotList = robotListJson.data.result.robots;
  1. রোবটের বিস্তারিত তথ্য পান
//Get robot detail information
var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
var robotDetail = robotDetailJson.data.result.robot;
  1. কনসোল আউটপুট টেবিলের তথ্য
function getLogPrient(infoArr){
    return table = {
            type: 'table',
            title: 'Oak Quant robot display',
            cols: [''Robot ID', 'Robot name', 'Strategy name', 'Next deduction time', 'Consumed time ms', 'Consumed amount CNY', 'Latest active time', 'Publish or not'],
            rows: infoArr
        };
}
  1. সংক্ষেপে, নিম্নলিখিত কোড পাওয়া যায় উৎস কোড ঠিকানাঃ- রোবট সম্পর্কে তথ্য পেতে এবং এটি প্রদর্শন করার জন্য বর্ধিত এপিআই ব্যবহার করুন
var URL = "https://www.fmz.com/api/v1?";
var AK = "b3a53d3XXXXXXXXXXXXXXXXXXX866fe5";//Replace here with your own AccessKey
var SK = "1d9ddd7XXXXXXXXXXXXXXXXXXX85be17";//Replace here with your own SecretKey
var OFF_SET = 0;//Page number subscript of query
var PAGE_LENGTH = 5;//Data length of the query page

function main() {
    LogReset();
    while(true){
        //Get robot list information
        var robotListJson = getAPIInfo('GetRobotList',getArgs(OFF_SET,PAGE_LENGTH,-1));
        //Get the robot list information
        var robotList = robotListJson.data.result.robots;
        //Create an array to display robot information
        var infoArr = new Array();
        var infoArr_index = 0;
        for (index = 0; index < robotList.length; index++) {
            var robot = robotList[index];
            //Get the robot ID of the current loop
            var robotId = robot.id;
            //Get robot detail information
            var robotDetailJson = getAPIInfo('GetRobotDetail',getArgs(robotId));
            var robotDetail = robotDetailJson.data.result.robot;
            //Convert details to array objects
            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: 'Oak Quant robot display',
            cols: [''Robot ID', 'Robot name', 'Strategy name', 'Next deduction time', 'Consumed time ms', 'Consumed amount CNY', 'Latest active time', 'Publish or not'],
            rows: infoArr
        };
}

//Get API information by parameters
function getAPIInfo(method,dateInfo){
    //Get 5 basic parameter objects
    var param = getParam("1.0.0",AK,method,dateInfo);
    //Log("param:",param);
    //Get the result after md5 encryption of splicing parameters
    var md5Result = md5(param);
    //Assign the encryption result to the basic parameter object
    param.sign = md5Result;
    //Get the URL of the request api
    var finalUrl = getFinalUrl(param);
    //Log("finalUrl:",finalUrl);
    //Execute the request and print the results
    var info = HttpQuery(finalUrl);
    //Log("info:",info);
    return JSON.parse(info);
}

//Get the object of the basic 5 parameters
function getParam(version,ak,method,args){
    return {
        'version': version,
        'access_key': ak,
        'method': method,
        'args': JSON.stringify(args),
        'nonce': new Date().getTime()
    }
}

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

//Get the final request URL
function getFinalUrl(param){
    return URL+"access_key="+AK+"&nonce="+param.nonce+"&args="+param.args+"&sign="+param.sign+"&version="+param.version+"&method="+param.method;
}

//The naming method of... args is not supported in js, so the arguments keyword is used instead to obtain the parameter array
function getArgs(){
    return [].slice.call(arguments);
}

//Get the display details object: ['Robot ID', 'Robot Name', 'Strategy Name', 'Next Deduction Time', 'Time Consumed ms', 'Amount Consumed CNY', 'Latest Active Time', 'Whether to Publish'],
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?"Published":"Unpublished";
    return itemArr;
}

সিদ্ধান্ত

প্রকৃত এক্সটেনশনে, আরও বেশি আকর্ষণীয় ফাংশন উপলব্ধি করা যেতে পারে। উদাহরণস্বরূপ, কমান্ডরোবট পদ্ধতি ব্যবহার করে, প্রতিটি রোবট রোবট এ-তে হার্টবিট সনাক্তকরণ প্রেরণ করে। যদি রোবট এ খুঁজে পায় যে কোনও মেশিনে কোনও হার্টবিট নেই, তবে রোবটটি এখনও চলছে, তবে এটি এফএমজেড পরিষেবার মাধ্যমে একটি অ্যালার্ম দিতে পারে। এইভাবে, _C ((() মৃত লুপের মতো অ্যালার্মগুলি এড়ানো যায় যা প্রোগ্রামের ভুয়া মৃত্যুর দৃশ্যকল্পের দিকে পরিচালিত করে। আমি আশা করি যে এইবারের আমার উপস্থাপনার মাধ্যমে, এফএমজেড প্ল্যাটফর্মের আরও বেশি আকর্ষণীয় ফাংশন থাকবে যা বিকাশ ও উন্মুক্ত হবে। অবশেষে, আমি এফএমজেড প্ল্যাটফর্ম এবং শাওসিয়াওমেং, মিঃ ঝাং এবং মিঃ জেডের মতো মহান ব্যক্তিদের তাদের সমর্থন ও সহায়তার জন্য ধন্যবাদ জানাতে চাই। ধন্যবাদ~


সম্পর্কিত

আরো