Google Apps Script调用CoinMarketCap API获取加密货币价格报错求助
修复后的CoinMarketCap加密货币价格获取函数
你的函数存在几个关键问题,以下是修复后的完整代码及问题说明:
修复后的代码
function getCryptoPrice(ticker) { // 默认使用ETH,避免重复声明变量 const targetTicker = ticker || "ETH"; const encodedTicker = encodeURI(targetTicker); // 构造正确的API请求URL,整合必要参数 const url = `https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=${encodedTicker}&convert=USD`; // 适配UrlFetchApp的标准请求配置 const requestOptions = { method: 'GET', headers: { // 替换为你自己的CoinMarketCap Pro API密钥 'X-CMC_PRO_API_KEY': 'YOUR_ACTUAL_API_KEY', 'Accept-Encoding': 'gzip' } }; try { const httpRequest = UrlFetchApp.fetch(url, requestOptions); const getContext = httpRequest.getContentText(); const parseData = JSON.parse(getContext); // 修正数据解析路径:data对象以加密货币symbol为键 if (parseData.data && parseData.data[targetTicker]) { return parseFloat(parseData.data[targetTicker].quote.USD.price); } else { throw new Error(`未找到加密货币 ${targetTicker} 的数据`); } } catch (error) { // 捕获错误并返回,便于表格内调试 return `错误: ${error.message}`; } }
原函数的问题及修复细节
- 无效请求参数:原
requestOptions中的uri、qs、json、gzip是第三方请求库(如request.js)的参数,并非Google Apps Script的UrlFetchApp支持的配置,已全部移除并替换为标准配置。 - 数据解析路径错误:CoinMarketCap返回的
data对象是以加密货币symbol为键的结构(如data.ETH),原代码直接访问data.quote会触发undefined错误,现已修正为正确的路径。 - 重复变量声明:函数参数已包含
ticker,内部无需再次声明,改用const targetTicker避免变量混淆。 - API密钥占位无效:原代码中的
'api'是无效密钥,需替换为你实际的CoinMarketCap Pro API密钥。 - 缺失错误处理:新增
try/catch块捕获请求或解析异常,方便在表格中查看具体错误信息。 - URL参数整合:将
convert=USD直接整合到请求URL中,符合GET请求的参数传递规范。
使用说明
- 替换代码中的
YOUR_ACTUAL_API_KEY为你从CoinMarketCap获取的Pro API密钥。 - 在Google表格中调用时,输入
=getCryptoPrice("BTC")可获取比特币的USD价格,不传参数默认返回ETH价格。
内容的提问来源于stack exchange,提问作者Jarod
相关产品推荐
相关产品推荐

