在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。
下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接
以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256
以下是一些例子:
这是我的代码,其中出现“无效授权标头”错误:
// Get Cryptopia balances
var key = keys.getRange("B4").getValue();
var secret = keys.getRange("C4").getValue();
var baseUrl = 'https://www.cryptopia.co.nz/api/';
var command = "GetBalance";
var url = baseUrl + command;
var signature = key + "POST" + encodeURIComponent(url).toLowerCase() + nonce;
var hmacsignature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,signature,secret);
var header_value = "amx " + key + ":" + hmacsignature + ":" + nonce;
var headers = { 'Authorization': header_value, 'Content-Type':'application/json; charset=utf-8' };
var options = {
method: 'POST',
headers: headers
};
var response = UrlFetchApp.fetch("https://www.cryptopia.co.nz/api/GetBalance", options);
var json = JSON.parse(response.getContentText());
}
Utilities.computeHmacSignature(算法,值,键)
方法不能正确计算二进制输入。value
和key
参数的类型是String
,但是Utilities.base64Decode
的结果是Byte[]
。原始二进制值在从Byte[]
转换为String
时发生更改。
使用jsSHA,并参考https://stackoverflow.com/a/14007167.
以下内容可用于计算正确的值,并通过适当的UrlFetchApp.fetch
的选项
获取结果。
.... paste src/sha256.js contents ...
...
var params = {"Currency" : "BTC"};
...
var sha = new jsSHA("SHA-256", "TEXT");
sha.setHMACKey(secret, "B64");
sha.update(signature);
var hmacsignature = sha.getHMAC("B64");
var header_value = "amx " + key + ":" + hmacsignature + ":" + nonce;
var headers = {
"Authorization" : header_value,
};
var options = {
"contentType": 'application/json; charset=utf-8',
"method": 'post',
"headers": headers,
"payload": JSON.stringify(params),
"contentLength": JSON.stringify(params).length
};
var response = UrlFetchApp.fetch(url, options);
var json = JSON.parse(response.getContentText());
Logger.log(json);
从示例链接来看,hmacsignature
似乎是由base64编码的。那么下面的模式呢?
var hmacsignature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,signature,secret);
var hmacsignature = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256,signature,secret));
var nonce=Math.floor(new Date(). getTime()/1000);
我不能测试这个。所以我不知道这是否有效。如果这不起作用,我很抱歉。
这个怎么样?var params = {};
可能是必需的,即使没有请求参数。所以我添加了这个和内容长度
。然后,秘密
是由bas64编码的吗?我想它可能是由其他脚本编码的。
var key = keys.getRange("B4").getValue();
var secret = keys.getRange("C4").getValue();
var nonce = Math.floor(new Date().getTime() / 1000); // Added
var params = {}; // Added
var baseUrl = 'https://www.cryptopia.co.nz/api/';
var command = "GetBalance";
var url = baseUrl + command;
var requestContentBase64String = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, JSON.stringify(params), Utilities.Charset.UTF_8)); // Added
var signature = key + "POST" + encodeURIComponent(url).toLowerCase() + nonce + requestContentBase64String; // Modified
var hmacsignature = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, signature, Utilities.base64Decode(secret), Utilities.Charset.UTF_8)); // Modified
var header_value = "amx " + key + ":" + hmacsignature + ":" + nonce;
var headers = {
"Authorization": header_value,
"Content-Type": 'application/json; charset=utf-8',
"Content-Length" : Utilities.newBlob(JSON.stringify(params)).getBytes().length // Added
};
var options = {
method: 'POST',
headers: headers
};
var response = UrlFetchApp.fetch(url, options);
var json = JSON.parse(response.getContentText());
我想实现什么? 我想跟踪一个谷歌文档的审查状态与谷歌表单与下拉选项为"要做,进行中,完成"。我有谷歌表单项目作为"URL的文档,状态"。我已经创建了一个谷歌表单模板,我将使用它为各种用户创建表单。我希望能够创建模板表单的副本,并从谷歌应用程序脚本中设置预定义的"URL"值,以便用户只需选择文档的状态。 我试过什么? 我在这个答案中遇到了createResponse()方法,但这需要用于保存响应,并
我希望每天凌晨1点从外部来源将一些数据输入到谷歌的工作表中。进口产品的数量将有所不同。 然后,我希望在数据上传完成后,按价格对数据进行排序,这将是凌晨1:05左右。 我看到它是可能的运行功能为谷歌工作表在一个时间的基础上。 我需要什么样的脚本来按价格对数据进行排序,所以最便宜的项目是每天早上运行脚本后的第2行。 要在Google Sheets中手动执行此操作,我会这样做-*突出显示第2行到数据,排
我有一个谷歌电子表格,我用它创建了一个谷歌表单。电子表格有两张表:一张有表单响应,另一张有配置数据。电子表格附带了一个表单响应触发的应用程序脚本,该脚本使用配置数据进行API调用。这个脚本运行完全符合我的要求。 我已经编写了电子表格更改触发脚本,试图更新表单问题之一的选项。但是,使用FormApp。openById或FormApp。openByUrl因“您无权调用…”而失败。 是否有某种方法可以将
我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说
我想使用谷歌应用程序脚本更新谷歌电子表格,并在我拥有的一系列日历发生更改时使用Gmail API发送电子邮件。 Google日历推送通知是否可以与Google App Script一起使用,或者是否需要其他某种平台? 我愿意学习任何必要的东西。我知道需要一个域名来接收通知。 我感谢你的帮助!
此函数工作正常。当当前工作表不是Google表单响应工作表时。我正在使用(每分钟)触发器 图像:沙子数据(主数据)表至(共享数据1)表 我正在寻找一个,当用户提交的谷歌表格的状态是(支付),数据应该在第二页,这是(shareData1) 这里的问题是,当我使用谷歌表单响应表时,这个函数将不再工作。它显示了一个错误。错误图像 在降级的错误图像中,我手动运行此函数,相同的错误显示在AppScript面