api - 来自谷歌表格的 API 调用太长
问题描述
我正在尝试在谷歌表格中编写一个脚本来更新我的 3commas 机器人。即使只有 1 项需要更新,API 也需要传递许多必填字段。
我的代码如下,它使用已经从平台读取的值,仅更新 base_order_volume 值。这非常有效,除非当对值很长(超过 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"}]
}
提前致谢
解决方案
我会考虑使用云函数来完成繁重的工作,或者,如果您担心成本,请将其用作代理。然后,您可以从 Google 表格调用云功能。Cloud Functions 可以用您最熟悉的任何语言编写,包括 Node.js。
查看GCP 定价计算器以了解费用是多少。在许多情况下,它是完全免费的。
这应该让您了解如何使用云函数创建 CSV:
https://codelabs.developers.google.com/codelabs/cloud-function2sheet#0
这是一个带有答案的 SO 问题,解释了如何使用身份验证查询云功能。
推荐阅读
- pyspark - 排序然后按数据框分组-分组后是否保留排序顺序?
- nginx - 如何使反向代理后面的 nginx 允许基于来自不同标头的 IP 地址进行访问
- cucumber-jvm - 我不知道如何使用@cucumberOption 并行化我在黄瓜中的测试
- c - 如何准确理解 malloc() 和 calloc() 两个函数的语法
- sql - 根据列中存在的逗号拆分列值
- oracle12c - 带有来自 expdp 转储的 blob 的 impdp 表
- r - 在一行中一个一个地转换向量中的变量
- sql - SQL Server如何判断一组值是否与另一组值不同
- c++ - 无法在 Centos7 上构建 32 位库
- c - 为什么在重定向到同一个文件时会覆盖部分输出,但在终端时却没有?