尝试将 Coinbase Pro API 导入 Google 表格时出现解析错误
Parsing Error trying to import Coinbase Pro API into Google Sheets
Google 表格中 API 的新手,但我觉得我已经完成了我想去的地方的 95%。
我正在尝试将加密数据提取到我的电子表格中以进行简单的 24 小时价格比较并衡量价格是上涨还是下跌,也许使用一些条件代码将背景更改为绿色或红色。很简单。不过,大多数提供 APIs 的网站都给了我各种错误,所以 coinbase pro(奇怪的是,已弃用的 gdax)是最可靠的(尽管我没有排除它开始崩溃的可能性,因为我现在提出太多呼叫请求)。
发现这是获取 ETH 当前价格的一种方式,例如:
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.gdax.com/products/ETH-USD/ticker"),0,2), "price:",""), """", ""))
很有魅力。因此,我更改了针对不同信息的请求,特别是 24hr stats listed on the API doc,以及该部分中的第一个值,“open”表示开盘价(这确保我准确地提前 24 小时获得价格)。但是我在使用请求时遇到了一个奇怪的解析错误,它在这里:
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", ""))
我找到了问题,但还没有找到解决方案。 Google 表格说我正在提取文本。因为“open”(开盘价)值是第一个在 JSON 代码中列出的,所以它从嵌套的 HTML/JSON 代码中拉入代码括号。例如,它说我无法将“{open”解析为数字。当我提取统计部分中列出的最后一个值时,我遇到了同样的问题,即“volume_30day:”
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", ""))
这个returns一个错误说“volume_30day:#}”无法解析,所以现在它是JSON代码的右括号。所以我不能使用“打开”API 24 小时统计部分中的第一项,或 Volume_30day,这是该列表中的第六项,但项目 2-5 工作正常。对我来说似乎超级奇怪,但我已经测试过了,这似乎是正在发生的事情。
这里一定有一些愚蠢的东西我需要调整,但我不知道它是什么。
答案 1:
About =VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", ""))
- 我勾选
=SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", "")
时,值为{open:617
。我认为当通过这个,当 VALUE
用于值时,会发生错误。
为了取回你期望的值,我建议使用REGEXREPLACE
而不是SUBSTITUTE
。修改后的公式如下
=VALUE(REGEXREPLACE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open|""|{|}|:",""))
- 在此修改后的公式中,
open|""|{|}|:
用作正则表达式。这些被替换为 ""
.
- 这种情况下,我觉得
=VALUE(REGEXEXTRACT(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "\d+"))
也可以。但是当我想到你的第二个问题时,我认为上面的公式可能会有用。
结果:
答案 2:
About =VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", ""))
- 我勾选
=SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", "")
时,值为7101445.64098932}
。我认为当通过这个,当 VALUE
用于值时,会发生错误。
为了取回你期望的值,我建议使用REGEXREPLACE
而不是SUBSTITUTE
。修改后的公式如下
=VALUE(REGEXREPLACE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day|""|{|}|:",""))
- 在此修改后的公式中,
volume_30day|""|{|}|:
用作正则表达式。这些被替换为 ""
.
- 在此正则表达式中,可以通过将上面正则表达式中的
open|""|{|}|:
的 open
替换为 volume_30day
来使用。
结果:
其他模式1:
作为其他使用内置公式的模式,以下修改公式如何?
=VALUE(TEXTJOIN("",TRUE,ARRAYFORMULA(IFERROR(VALUE(REGEXREPLACE(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"), "open|""|{|}|:","")),""))))
=VALUE(TEXTJOIN("",TRUE,ARRAYFORMULA(IFERROR(VALUE(REGEXREPLACE(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"), "volume_30day|""|{|}|:","")),""))))
在这些公式中,可以通过替换正则表达式的 KEY|""|{|}|:
的 KEY
来检索值。
其他模式2:
https://api.pro.coinbase.com/products/ETH-USD/stats
的返回值是 JSON 值。所以在这种情况下,当 Google Apps Script 创建的自定义函数也可以使用时。
Google Apps脚本如下。
const SAMPLE = (url, key) => JSON.parse(UrlFetchApp.fetch(url).getContentText())[key] || "no value";
当您使用该脚本时,请将上述脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。请将 =SAMPLE("https://api.pro.coinbase.com/products/ETH-USD/stats","open")
和 =SAMPLE("https://api.gdax.com/products/ETH-USD/ticker","price")
等自定义函数放入单元格。通过这个,可以检索该值。
参考文献:
Google 表格中 API 的新手,但我觉得我已经完成了我想去的地方的 95%。
我正在尝试将加密数据提取到我的电子表格中以进行简单的 24 小时价格比较并衡量价格是上涨还是下跌,也许使用一些条件代码将背景更改为绿色或红色。很简单。不过,大多数提供 APIs 的网站都给了我各种错误,所以 coinbase pro(奇怪的是,已弃用的 gdax)是最可靠的(尽管我没有排除它开始崩溃的可能性,因为我现在提出太多呼叫请求)。
发现这是获取 ETH 当前价格的一种方式,例如:
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.gdax.com/products/ETH-USD/ticker"),0,2), "price:",""), """", ""))
很有魅力。因此,我更改了针对不同信息的请求,特别是 24hr stats listed on the API doc,以及该部分中的第一个值,“open”表示开盘价(这确保我准确地提前 24 小时获得价格)。但是我在使用请求时遇到了一个奇怪的解析错误,它在这里:
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", ""))
我找到了问题,但还没有找到解决方案。 Google 表格说我正在提取文本。因为“open”(开盘价)值是第一个在 JSON 代码中列出的,所以它从嵌套的 HTML/JSON 代码中拉入代码括号。例如,它说我无法将“{open”解析为数字。当我提取统计部分中列出的最后一个值时,我遇到了同样的问题,即“volume_30day:”
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", ""))
这个returns一个错误说“volume_30day:#}”无法解析,所以现在它是JSON代码的右括号。所以我不能使用“打开”API 24 小时统计部分中的第一项,或 Volume_30day,这是该列表中的第六项,但项目 2-5 工作正常。对我来说似乎超级奇怪,但我已经测试过了,这似乎是正在发生的事情。
这里一定有一些愚蠢的东西我需要调整,但我不知道它是什么。
答案 1:
About
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", ""))
- 我勾选
=SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open:",""), """", "")
时,值为{open:617
。我认为当通过这个,当VALUE
用于值时,会发生错误。
为了取回你期望的值,我建议使用REGEXREPLACE
而不是SUBSTITUTE
。修改后的公式如下
=VALUE(REGEXREPLACE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "open|""|{|}|:",""))
- 在此修改后的公式中,
open|""|{|}|:
用作正则表达式。这些被替换为""
. - 这种情况下,我觉得
=VALUE(REGEXEXTRACT(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,1), "\d+"))
也可以。但是当我想到你的第二个问题时,我认为上面的公式可能会有用。
结果:
答案 2:
About
=VALUE(SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", ""))
- 我勾选
=SUBSTITUTE(SUBSTITUTE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day:",""), """", "")
时,值为7101445.64098932}
。我认为当通过这个,当VALUE
用于值时,会发生错误。
为了取回你期望的值,我建议使用REGEXREPLACE
而不是SUBSTITUTE
。修改后的公式如下
=VALUE(REGEXREPLACE(INDEX(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"),0,6), "volume_30day|""|{|}|:",""))
- 在此修改后的公式中,
volume_30day|""|{|}|:
用作正则表达式。这些被替换为""
. - 在此正则表达式中,可以通过将上面正则表达式中的
open|""|{|}|:
的open
替换为volume_30day
来使用。
结果:
其他模式1:
作为其他使用内置公式的模式,以下修改公式如何?
=VALUE(TEXTJOIN("",TRUE,ARRAYFORMULA(IFERROR(VALUE(REGEXREPLACE(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"), "open|""|{|}|:","")),""))))
=VALUE(TEXTJOIN("",TRUE,ARRAYFORMULA(IFERROR(VALUE(REGEXREPLACE(IMPORTDATA("https://api.pro.coinbase.com/products/ETH-USD/stats"), "volume_30day|""|{|}|:","")),""))))
在这些公式中,可以通过替换正则表达式的 KEY|""|{|}|:
的 KEY
来检索值。
其他模式2:
https://api.pro.coinbase.com/products/ETH-USD/stats
的返回值是 JSON 值。所以在这种情况下,当 Google Apps Script 创建的自定义函数也可以使用时。
Google Apps脚本如下。
const SAMPLE = (url, key) => JSON.parse(UrlFetchApp.fetch(url).getContentText())[key] || "no value";
当您使用该脚本时,请将上述脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。请将 =SAMPLE("https://api.pro.coinbase.com/products/ETH-USD/stats","open")
和 =SAMPLE("https://api.gdax.com/products/ETH-USD/ticker","price")
等自定义函数放入单元格。通过这个,可以检索该值。