如何在Google Sheets中无需事件监听器获取text/event-stream单条响应
Google Apps Script 本身是同步执行的 runtime,不支持浏览器端的 EventSource API,也没有事件循环等待异步回调触发,你之前用的 polyfill 是适配浏览器环境的,在 Apps Script 中无法生效,脚本执行完成后进程会直接退出,自然等不到 message 事件的返回。
你不需要用 EventSource 就能实现需求,直接调用 Apps Script 内置的 UrlFetchApp 发起普通 GET 请求即可,text/event-stream 本质是流式返回的纯文本内容,只取第一条响应的话直接解析返回的文本内容就行,示例代码如下:
function getRplantTotal() { const apiUrl = "https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4"; const fetchOptions = { headers: { "Accept": "text/event-stream" }, muteHttpExceptions: true }; // 同步等待请求返回,不需要异步处理 const response = UrlFetchApp.fetch(apiUrl, fetchOptions); const rawContent = response.getContentText(); // 按行解析SSE格式,提取第一条data字段的内容 const contentLines = rawContent.split("\n"); let firstResponseData = ""; for (let line of contentLines) { if (line.startsWith("data:")) { firstResponseData = line.slice(5).trim(); break; } } // 输出结果,也可以直接写入表格对应单元格 console.log(firstResponseData); // 如需写入当前激活工作表的A1单元格,可取消下面一行的注释 // SpreadsheetApp.getActiveSheet().getRange("A1").setValue(firstResponseData); return firstResponseData; }
SSE 的响应格式非常简单,每一条消息的内容都会以 data: 为行开头,不同消息之间用空行分隔,你只需要第一条数据的话,解析到第一个 data: 开头的行就可以终止处理。
内容的提问来源于stack exchange,提问作者Kyle Dixon
相关产品推荐
相关产品推荐

