Как связать 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-модели мог говорить и сообщать погоду.

0 ответов

Другие вопросы по тегам