Как работать со слотом AMAZON.DATE с помощью навыков работы с Node.js Amazon Alexa.
Если вы сталкивались с разработкой навыков Amazon Alexa с помощью Node.js, вы, вероятно, столкнулись бы с некоторыми проблемами при работе со слотом AMAZON.DATE.
Слот AMAZON.DATE можно использовать для множества различных задач: для получения события на определенную дату, для запроса календаря, для проверки бронирования и т. Д.
Представительство AMAZON.DATE
Слот AMAZON.DATE преобразует слова, представляющие даты, в формат даты. Ниже полный список конверсий:
- «Прямо сейчас»: PRESENT_REF
- «Сегодня»: 2017–11–24
- «Завтра»: 2017–11–25
- «Двадцать пятое ноября»: 2017–11–25
- «В следующий понедельник»: 2017–11–30
- «На этой неделе»: 2017-нед.48
- «Следующая неделя»: 2017-W49
- «В эти выходные»: 2017-W48-WE
- «В этом месяце»: 2017–11 и 2019–11-XX гг.
- «Следующий год»: 2018 и 2019-XX
- «Это десятилетие»: 201X
- «Следующей зимой»: 2018-WI
- «Этим летом»: 2017-SU
- «Этой осенью»: 2017-FA // as Fall
- «Этой весной»: 2017-SP
- «Этот квартал»: 2019-I квартал
Дополнительную информацию можно найти в Справочном руководстве по типам слотов Amazon.
AMAZON.DATE и объект Date JS
Предполагая, что вы обрабатываете даты с помощью объекта Javascript Date, первая проблема заключается в том, что вы не можете использовать значение AMAZON.date «как есть».
Например, следующий фрагмент кода возвращает «Invalid Date»:
new Date('2017-W50'); new Date('PRESENT_REF');
Другая проблема связана с такими представлениями, как «на этой неделе» или «на этих выходных», которые являются выражением определенной начальной и конечной точки. Чтобы прояснить этот случай, представьте, что вы хотите получить из базы данных список фильмов о кинотеатрах на эти выходные. Вероятно, вам следует запросить базу данных с помощью следующего псевдо-SQL-кода: `Выбрать фильмы между этой субботой и этим воскресеньем`.
Как справиться со всеми этими проблемами?
С помощью amazon-date-parser.
Парсер даты Amazon
Amazon-date-parser - полезный пакет npm (подробнее здесь). Он преобразует значение слота AMAZON.DATE в объект JS, состоящий из startDate и endDate, то есть:
var AmazonDateParser = require('amazon-date-parser'); var date = new AmazonDateParser('2017-W48'); console.log(date); /* returns: { endDate: Sun Dec 03 2017 23:59:59 GMT+0000 (GMT), startDate: Mon Nov 27 2017 00:00:00 GMT+0000 (GMT) } */
Значения startDate и endDate являются объектами JS Date, и это отлично подходит для дальнейшего преобразования даты:
//following to the previous script below a conversion example console.log(date.startDate.toLocaleDateString('en-US')); // returns “11/27/2017” console.log(date.endDate.toLocaleDateString('en-GB')); // returns “12/3/2017”
Сезоны обработки
Библиотека также обрабатывает периоды времени года, но, поскольку концепция сезона может варьироваться в зависимости от контекста, на данный момент поддерживаются только метеорологические сезоны.
Итак, что такое сезон. Смотря как…
Метеорологические сезоны
С «метеорологической точки зрения» сезон основан на определенных погодных условиях, температуре или продолжительности дня. Итак, для жителей южного полушария, таких как Австралия или Бразилия, лето начинается 1 декабря.
Метеорологические сезоны в основном делятся на:
- Весна - с 1 марта по 31 мая;
- Лето - с 1 июня по 31 августа;
- Осень / Осень - с 1 сентября по 30 ноября;
- Зимний - с 1 декабря по 28 февраля (29 февраля в високосном году).
Астрономические сезоны
Астрономические сезоны основаны на датах равноденствий и солнцестояний.
В северном полушарии четыре астрономических сезона следующие:
- Весна - от мартовского равноденствия до июньского солнцестояния;
- Лето - июньское солнцестояние - сентябрьское равноденствие;
- Осень / Осень - от сентябрьского равноденствия до декабрьского солнцестояния;
- Зима - от декабрьского солнцестояния до мартовского равноденствия.
Если вы хотите работать с астрономическими сезонами, вам нужны даты-сезоны библиотеки npm.
Пример использования навыков Alexa
На этом этапе, вероятно, вы думаете о том, как использовать эту библиотеку в следующем навыке Alexa, я считаю, что следующий фрагмент кода даст вам представление:
var AmazonDateParser = require('amazon-date-parser'); //... 'searchIntent': function () { var slotValue = this.event.request.intent.slots.date.value; var dateRange = new AmazonDateParser(slotValue); //... /* At this point you can use dateRange.startDate and dateRange.endDate to query an API or a database. */
Ниже приведен образец схемы намерений Alexa.
{ "intents": [ { "intent": "AMAZON.HelpIntent", "slots": [] }, { "intent": "AMAZON.StopIntent", "slots": [] }, { "intent": "AMAZON.CancelIntent", "slots": [] }, { "intent": "AMAZON.YesIntent", "slots": [] }, { "intent": "AMAZON.NoIntent", "slots": [] }, { "intent": "searchIntent", "slots": [ { "name": "date", "type": "AMAZON.DATE" } ]} ] }
И так, чего же ты ждешь? Добавьте библиотеку в свои зависимости и поделитесь отзывами!
npm install amazon-date-parser