【发布时间】:2021-08-10 03:12:22
【问题描述】:
我正在尝试在 google 表格中编写一个脚本来更新我的 3commas 机器人。 API 要求传递许多必填字段,即使只有一项需要更新。
我的代码如下,它使用已经从平台读取的值,仅更新 base_order_volume 值。这非常有效,除非pairs值很长(超过2k个字符),然后我从UrlFetchApp调用中收到错误,因为URL太长了。
var sheet = SpreadsheetApp.getActiveSheet();
var key = sheet.getRange('F4').getValue();
var secret = sheet.getRange('F5').getValue();
var baseUrl = "https://3commas.io";
var editBots = "/ver1/bots/"+bots[botCounter].id+"/update";
var patchEndPoint = "/public/api"+editBots+"?";
.
.
[loop around values in sheet]
.
.
var BaseOrder=Number(sheet.getRange(rowCounter,12).getValue().toFixed(2));
var botParams = {
"name": bots[botCounter].name,
"pairs": bots[botCounter].pairs,
"max_active_deals": bots[botCounter].max_active_deals,
"base_order_volume": BaseOrder,
"take_profit": Number(bots[botCounter].take_profit),
"safety_order_volume": bots[botCounter].safety_order_volume,
"martingale_volume_coefficient": bots[botCounter].martingale_volume_coefficient,
"martingale_step_coefficient": Number(bots[botCounter].martingale_step_coefficient),
"max_safety_orders": bots[botCounter].max_safety_orders,
"active_safety_orders_count": Number(bots[botCounter].active_safety_orders_count),
"safety_order_step_percentage": Number(bots[botCounter].safety_order_step_percentage),
"take_profit_type": bots[botCounter].take_profit_type,
"strategy_list": bots[botCounter].strategy_list,
"bot_id": bots[botCounter].id
};
var keys = Object.keys(botParams);
var totalParams = keys.reduce(function(q, e, i) {
q += e + "=" + encodeURIComponent(JSON.stringify(botParams[e])) + (i != keys.length - 1 ? "&" : "");
return q;
},endPoint);
var signature = Utilities.computeHmacSha256Signature(totalParams, secret);
signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");
var headers = {
'APIKEY': key,
'Signature': signature,
};
try {
var params = {
'method': 'PATCH',
'headers': headers,
'muteHttpExceptions': true
};
var response = JSON.parse(UrlFetchApp.fetch(baseUrl + totalParams, params).getContentText());
我尝试将 botParams 设置为参数中的有效负载,但是当我这样做时签名不正确。
我任何人都知道如何使用工作表来使用大量参数进行调用,如果有任何帮助,我将不胜感激
bots 数组的一些示例数据是
{
"name": "TestBot",
"base_order_volume": 0.001,
"take_profit": 1.5,
"safety_order_volume": 0.001,
"martingale_volume_coefficient": 2,
"martingale_step_coefficient": 1,
"max_safety_orders": 1,
"active_safety_orders_count": 1,
"safety_order_step_percentage": 2.5,
"take_profit_type": "total",
"stop_loss_percentage": 0,
"cooldown": 0,
"pairs": ["BTC_ADA","BTC_TRX"],
"trailing_enabled":"true",
"trailing_deviation":0.5,
"strategy_list": [{"strategy":"cqs_telegram"}]
}
提前致谢
【问题讨论】:
-
我发现这篇文章有一个脚本,可以传递有效负载中的值,这正是我所需要的,但它错误地说签名无效。 stackoverflow.com/questions/54495794/…
-
我从your commentthis answer 注意到你的这个问题。在您的脚本中,您能否提供
bots的示例值来检查值?当然,请用其他字符替换您的个人信息。 -
您好,感谢您的回复!作为测试,我一直在使用另一篇文章中的值。您在另一篇文章中提到操作员说答案有效,但我无法继续。我不断收到和签名无效错误在上面的脚本中所做的是从平台中提取 botParams 的值,只需更改一个项目,然后调用 api 来更新机器人
-
感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,从您的回复中,我无法理解
bots的样本值和您目前的情况。但是,我想试着理解它。当我能正确理解它并找到解决方案时,我想回答它。非常抱歉,我无法尽快解决您的问题。 -
嗨,我已经用示例数据更新了这个问题,但这非常有效,因为传递数据不会使 URL 太长。我想我需要将传入的值移动到参数并仍然成功创建签名
标签: api google-sheets