Как связать API OpenWeather с AWS Sumerian?
Я сослался и скопировал JavaScript-скрипт, который получает информацию о погоде из OpenWeather API, а скопированные мною скрипты не работают должным образом в AWS Sumerian.
Ниже учебный сайт, на который я ссылался и пробовал.
https://docs.sumerian.amazonaws.com/articles/weather-report-guest/
Я лично думаю, что функция fetch() в скрипте не получает никакого ответа и не знаю почему.
Что я хочу реализовать, так это получать информацию о погоде из открытого API и заставлять хост 3D-модели передавать эту информацию о погоде с помощью AWS Sumerian(инструмент 3D-моделирования) и сервиса Amazon Polly(Text to Speech).
Во-первых, этот шумерский состоит из двух видов развивающего инструмента. Одним из них является инструмент блок-схемы под названием "State Machine", который управляет трехмерными моделями на шумерском языке. Это просто похоже на 'MIT Scratch' и имеет возможность создавать условия сценария самостоятельно.
Другой - "скрипт", который был создан из конечного автомата и основан на JavaScript. Ниже приведен справочный веб-сайт API скрипта.
https://content.sumerian.amazonaws.com/engine/latest/docs/
Итак, в конечном автомате я создал 2 состояния, и ниже я создал поток.
Get Weather(On Get Weather Script Success, On Get Weather Failure)
↓
Tell Weather(On Tell Weather Script Success, On Tell Weather Script Failure)
Проблема в том, что в состоянии Get Weather нет ответа от Get Weather Script, даже если он не выполнен.
Пожалуйста, проверьте сценарии (Get Weather, Tell Weather) и ответьте, есть ли какая-либо ошибка в коде или укажите любую ошибку, которую я сделал в сценариях.
Получить скрипт погоды
'use strict';
/* global sumerian */
const WEATHER_URL = 'https://api.openweathermap.org/data/2.5/weather?q=seoul&appid=your openweathermap api key here'
// When used in a ScriptAction, called when a state is entered.
//
function enter(args, ctx) {
const { latitude, longitude } = ctx.behaviorData.payload; // 1
fetch('${WEATHER_URL}&lat={latitude}&lon=${longitude}') // 2
.then(response => response.json())
.then(data => {
ctx.behaviorData.payload.weather = data.weather[0].description; // 3
ctx.transitions.success(); // 4
});
}
// Defines script parameters.
//
var parameters = [];
Сообщение консоли Chrome
[Sumerian] Loading engine version 0.25.201907101851+9b630ed with enabled features: core, bootstrapper, gizmo, sceneloader, animation, aws, debug, dom3d, host, particle, physics, cannonphysics, posteffect, timeline.
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14 [Sumerian] Loaded Sumerian Engine Version: 0.25.201907101851+9b630ed
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1 [Sumerian] Using WebGL2
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14 [Sumerian] An unhandled error has occurred: SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at SpeechManager._parseSpeechMarks (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/awspack.js:2)
at content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/awspack.js:2
at async Promise.all (ap-northeast-2.sumerian.amazonaws.com/edit/index 1)
(anonymous) @ content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14
(unknown) Cannot establish connection - target does not exist
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14 [Sumerian] An unhandled error has occurred: SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at SpeechManager._parseSpeechMarks (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/awspack.js:2)
at content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/awspack.js:2
at async Promise.all (ap-northeast-2.sumerian.amazonaws.com/edit/index 1)
(anonymous) @ content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1 [Sumerian] An error occurred at line 11 when calling the "Get Weather Script" script's "enter" function. Cannot destructure property `latitude` of 'undefined' or 'null'. TypeError: Cannot destructure property `latitude` of 'undefined' or 'null'.
at ScriptProxy_ScriptProxy.enter (ap-northeast-2.sumerian.amazonaws.com/edit/sumerian-custom-scripts/b70ff1b210bf482981c931bf6c4719d6.script.js?v=5:27)
at ScriptSystem.callScriptFunction (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at ScriptAction_ScriptAction.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
at State._callSafe (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at State.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at Machine.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineComponent.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineSystem_StateMachineSystem._startEntity (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
at StateMachineSystem_StateMachineSystem.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineSystem_StateMachineSystem.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
_handleScriptError @ content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1
content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1 [Sumerian] An error occurred at line 9 when calling the "Get Weather Script" script's "enter" function. Cannot destructure property `latitude` of 'undefined' or 'null'. TypeError: Cannot destructure property `latitude` of 'undefined' or 'null'.
at ScriptProxy_ScriptProxy.enter (ap-northeast-2.sumerian.amazonaws.com/edit/sumerian-custom-scripts/b70ff1b210bf482981c931bf6c4719d6.script.js?v=6:25)
at ScriptSystem.callScriptFunction (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at ScriptAction_ScriptAction.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
at State._callSafe (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at State.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at Machine.enter (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineComponent.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineSystem_StateMachineSystem._startEntity (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
at StateMachineSystem_StateMachineSystem.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:1)
at StateMachineSystem_StateMachineSystem.start (content.sumerian.amazonaws.com/engine/0/25/201907101851+9b630ed/sumerian.js:14)
Скрипт погоды Tell
'use strict';
/* global sumerian */
function compileSpeech(speech, args) {
return speech.replace(/\$\{([^}]+)\}/g, (match, variable) => args[variable] || '');
}
// When used in a ScriptAction, called when a state is entered
//
function enter(args, ctx) {
const speech = ctx.entity.speechComponent.speeches[0];
// Put dynamic data into speech
speech.body = compileSpeech(speech.body, ctx.behaviorData.payload)
}
// Defines script parameters.
//
var parameters = [];
Я ожидаю, что Get Weather Script работает и передает данные JSON в Tell Weather Script, чтобы хозяин 3D-модели мог говорить и сообщать погоду.