Skip to content

Instantly share code, notes, and snippets.

@masanobuimai
Created January 9, 2018 12:19
Show Gist options
  • Save masanobuimai/c460308ff333aef6a6bb38eb8028abe2 to your computer and use it in GitHub Desktop.
Save masanobuimai/c460308ff333aef6a6bb38eb8028abe2 to your computer and use it in GitHub Desktop.
どこバス(AWS Lambda)
'use strict';
var Alexa = require('alexa-sdk');
//=========================================================================================================================================
//TODO: このコメント行より下の項目に注目してください。
//=========================================================================================================================================
//Replace with your app ID (OPTIONAL). You can find this value at the top of your skill's page on http://developer.amazon.com.
//Make sure to enclose your value in quotes, like this: var APP_ID = "amzn1.ask.skill.bb4045e6-b3e8-4133-b650-72923c5980f1";
var APP_ID = undefined;
var SKILL_NAME = "どこバス";
var HELP_MESSAGE = "バス情報を知りたい時は「バスどこ」と、終わりたい時は「おしまい」と言ってください。どうしますか?";
var HELP_REPROMPT = "どうしますか?";
var STOP_MESSAGE = "さようなら";
//=========================================================================================================================================
//この行から下のコードに変更を加えると、スキルが動作しなくなるかもしれません。わかる人のみ変更を加えてください。
//=========================================================================================================================================
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.APP_ID = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'LaunchRequest': function () {
this.emit('GetNewFactIntent');
},
'GetNewFactIntent': function () {
var that = this;
var speechOutput = '';
getBusInfo(function(sekins) {
if (sekins.length == 0) {
speechOutput = 'バス情報は見つかりませんでした。';
} else {
//speechOutput += 'バス情報は全部で' + sekins.length + '件あります。';
for (var i = 0; i < sekins.length; i++) {
var jikoku = sekins[i].teiryujojikoku;
var unko = sekins[i].unkojokyo;
if (jikoku == '') {
speechOutput += '当面発着予定がないか運行しておりません。';
break;
}
if (unko == '*') {
speechOutput += jikoku + 'のバスは、まだわかりません。';
var remain = sekins.length - i - 1;
if (remain > 0) {
speechOutput += '残りの' + remain + '件は省略します。';
break;
}
} else {
speechOutput += jikoku + 'のバスは、' + unko + '。';
}
}
}
that.emit(':tellWithCard', speechOutput, SKILL_NAME, speechOutput);
});
},
'AMAZON.HelpIntent': function () {
var speechOutput = HELP_MESSAGE;
var reprompt = HELP_REPROMPT;
this.emit(':ask', speechOutput, reprompt);
},
'AMAZON.CancelIntent': function () {
this.emit(':tell', STOP_MESSAGE);
},
'AMAZON.StopIntent': function () {
this.emit(':tell', STOP_MESSAGE);
}
};
function getBusInfo(callback) {
const BUSAPI = {
host: 'dokobus.info',
path: '/search.php?depStr=%E6%98%8E%E7%9F%B3%E5%8D%97%E4%BA%8C%E4%B8%81%E7%9B%AE&arrStr=%E6%B3%89%E4%B8%AD%E5%A4%AE%E9%A7%85&depKey=668&arrKey=224&_=1514763441462',
medhot: 'GET'
};
var req = require('http').request(BUSAPI, function(res) {
res.setEncoding('utf8');
var data = '';
res.on('data', function(chunk) { data += chunk; });
res.on('end', function() {
var json = JSON.parse(data);
callback(json['sekins']);
});
}).on('error', function(e) { callback([]); }).end();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment