gpt4 book ai didi

javascript - 有没有办法在不使用事件监听器的情况下从文本/事件流中获取单个响应?

转载 作者:行者123 更新时间:2023-12-05 01:56:56 25 4
gpt4 key购买 nike

我正在 Google 表格中编写脚本以从 API 检索值。 API 大约每 10 秒提供一次 text/event-stream 响应。有没有一种方法可以在不使用异步函数或事件监听器的情况下检索单个响应?我不太擅长 JavaScript,但因为我在 Google 表格中工作,异步函数和事件监听器似乎无法正常工作。根据我目前所学,处理 text/event-stream 响应的唯一方法是使用 EventSource 但我无法让它与 Google 表格一起使用.

不过,我的目标只是从端点检索一个响应,因此我可以在 Google 表格中以任何方式实现这一目标。这是有帮助的端点:

https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4

因为我无法在 Google 表格中使用 EventStream,所以我尝试使用在这里找到的 polyfil:https://github.com/amvtek/EventSource/blob/master/dist/eventsource.js

然后运行它:

function getRplantTotal() {
var source = new EventSource('https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4');

source.addEventListener("message", function(e) {
console.log(e.data);
});
}

但这只是输出:

3:11:49 PM  Notice  Execution started
3:11:49 PM Notice Execution completed

最佳答案

我相信你的目标如下。

  • 您想使用 Google Apps 脚本从 https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4 的 URL 检索第一个值,并希望使用检索到的脚本Google 电子表格中的值。

问题和解决方法:

当我看到 https://github.com/amvtek/EventSource/blob/master/dist/eventsource.js 时,似乎请求是使用 XMLHttpRequest 运行的。在Google Apps Script处,使用的是UrlFetchApp,不能使用XMLHttpRequest。我认为这可能是您当前问题的原因。但不幸的是,在当前阶段,这不能在 Google Apps 脚本中使用 text/event-stream 类型。当使用 UrlFetchApp 请求您的 URL 时,它看起来像无限循环。这是目前的情况。

因此,虽然我的目标只是从端点检索一个响应,因此我可以在 Google 表格中以任何方式实现这一目标。 对于上述情况,我想建议解决方法。当您在 Google Spreadsheet 上运行脚本时,如何使用 Javascript 从 URL 中检索值? Google Apps 脚本可以使用对话框和边栏从 Javascript 端检索值。根据您的问题,当使用 Javascript 时,可以检索该值。我认为这可能会被使用。当此解决方法反射(reflect)在 Google Apps 脚本中时,如下所示。

示例脚本:

Google Apps 脚本端:Code.gs

请将以下脚本复制并粘贴到 Google Spreadsheet 脚本编辑器的脚本文件中。

// Please run this function.
function main() {
SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("index"), "sample");
}

function getValues(e) {
const obj = JSON.parse(e); // This is the 1st value from the URL of "https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4"
console.log(obj)
// DriveApp.createFile("sample.txt", e); // When you use this, the retrieved value can be created as a text file.
}

Javascript 端:index.html

请将以下脚本复制并粘贴到 Google Spreadsheet 脚本编辑器的 HTML 文件中。请将文件名设置为 index.html

Values are retrieving now. Please wait. After the values were retrieved, this dialog is automatically closed.
<script>
var source = new EventSource('https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4');
source.addEventListener("message", function(e) {
source.close();
google.script.run.withSuccessHandler(google.script.host.close).getValues(e.data);
});
</script>
  • 在此脚本中,请从脚本编辑器运行main() 函数。这样,在电子表格上打开一个对话框,并使用 Javascript 从 URL 检索值,当检索到第一个值时,这些值将发送到 Google Apps 脚本端。因此,您可以在 getValues 函数中使用检索到的值。

注意事项:

  • 在此解决方法中,需要通过浏览器执行脚本。因为使用了 Javascript。所以,请注意这一点。

  • 作为另一种解决方法,当您只能使用 Javascript 时,Sheets API 可以与 Javascript 一起使用。 Ref在这种情况下,还可以使用 Javascript 检索值并将其放入电子表格。

引用资料:

关于javascript - 有没有办法在不使用事件监听器的情况下从文本/事件流中获取单个响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69654650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com