mirror of
https://github.com/openfaas/faas.git
synced 2025-06-18 12:06:37 +00:00
Add Captains counter intent for Alexa
This commit is contained in:
12
sample-functions/CaptainsIntent/.ash_history
Normal file
12
sample-functions/CaptainsIntent/.ash_history
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apk add nodejs curl --update
|
||||||
|
time cat request.json | node handler.js -
|
||||||
|
cd /root
|
||||||
|
time cat request.json | node handler.js -
|
||||||
|
time (cat request.json | node handler.js -)
|
||||||
|
time (cat request.json | node handler.js )
|
||||||
|
cat > run.sh
|
||||||
|
chmod +x run.sh
|
||||||
|
.r/
|
||||||
|
./r
|
||||||
|
./run.sh
|
||||||
|
time ./run.sh
|
12
sample-functions/CaptainsIntent/Dockerfile
Normal file
12
sample-functions/CaptainsIntent/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM alpine:latest
|
||||||
|
RUN apk --update add nodejs
|
||||||
|
COPY ./fwatchdog /usr/bin/
|
||||||
|
|
||||||
|
COPY package.json .
|
||||||
|
COPY handler.js .
|
||||||
|
COPY parser.js .
|
||||||
|
COPY sample.json .
|
||||||
|
|
||||||
|
RUN npm i
|
||||||
|
ENV fprocess="node handler.js"
|
||||||
|
CMD ["fwatchdog"]
|
48
sample-functions/CaptainsIntent/handler.js
Normal file
48
sample-functions/CaptainsIntent/handler.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
"use strict"
|
||||||
|
let fs = require('fs');
|
||||||
|
let sample = require("./sample.json");
|
||||||
|
let cheerio = require('cheerio');
|
||||||
|
let Parser = require('./parser');
|
||||||
|
var request = require("request");
|
||||||
|
|
||||||
|
const getStdin = require('get-stdin');
|
||||||
|
|
||||||
|
getStdin().then(content => {
|
||||||
|
let request = JSON.parse(content);
|
||||||
|
handle(request, request.request.intent);
|
||||||
|
});
|
||||||
|
|
||||||
|
function tellWithCard(speechOutput) {
|
||||||
|
sample.response.outputSpeech.text = speechOutput
|
||||||
|
sample.response.card.content = speechOutput
|
||||||
|
sample.response.card.title = "Captains";
|
||||||
|
console.log(JSON.stringify(sample));
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handle(request, intent) {
|
||||||
|
createList((sorted) => {
|
||||||
|
let speechOutput = "There are currently " + sorted.length + " Docker captains.";
|
||||||
|
tellWithCard(speechOutput);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let createList = (next) => {
|
||||||
|
let parser = new Parser(cheerio);
|
||||||
|
|
||||||
|
request.get("https://www.docker.com/community/docker-captains", (err, res, text) => {
|
||||||
|
let captains = parser.parse(text);
|
||||||
|
|
||||||
|
let valid = 0;
|
||||||
|
let sorted = captains.sort((x,y) => {
|
||||||
|
if(x.text > y.text) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(x.text < y.text) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
next(sorted);
|
||||||
|
});
|
||||||
|
};
|
1
sample-functions/CaptainsIntent/oneshot.txt
Normal file
1
sample-functions/CaptainsIntent/oneshot.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
docker build -t captainsintent . ; docker service rm CaptainsIntent ; docker service create --network=functions --name CaptainsIntent captainsintent
|
17
sample-functions/CaptainsIntent/package.json
Normal file
17
sample-functions/CaptainsIntent/package.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "CaptainsIntent",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "handler.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"cheerio": "^0.22.0",
|
||||||
|
"get-stdin": "^5.0.1",
|
||||||
|
"request": "^2.79.0"
|
||||||
|
}
|
||||||
|
}
|
32
sample-functions/CaptainsIntent/parser.js
Normal file
32
sample-functions/CaptainsIntent/parser.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
"use strict"
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = class Parser {
|
||||||
|
|
||||||
|
constructor(cheerio) {
|
||||||
|
this.modules = {"cheerio": cheerio };
|
||||||
|
}
|
||||||
|
|
||||||
|
sanitize(handle) {
|
||||||
|
let text = handle.toLowerCase();
|
||||||
|
if(text[0]== "@") {
|
||||||
|
text = text.substring(1);
|
||||||
|
}
|
||||||
|
if(handle.indexOf("twitter.com") > -1) {
|
||||||
|
text = text.substring(text.lastIndexOf("\/")+1)
|
||||||
|
}
|
||||||
|
return {text: text, valid: text.indexOf("http") == -1};
|
||||||
|
}
|
||||||
|
|
||||||
|
parse(text) {
|
||||||
|
let $ = this.modules.cheerio.load(text);
|
||||||
|
|
||||||
|
let people = $("#captians .twitter_link a");
|
||||||
|
let handles = [];
|
||||||
|
people.each((i, person) => {
|
||||||
|
let handle = person.attribs.href;
|
||||||
|
handles.push(this.sanitize(handle));
|
||||||
|
});
|
||||||
|
return handles;
|
||||||
|
}
|
||||||
|
};
|
24
sample-functions/CaptainsIntent/request.json
Normal file
24
sample-functions/CaptainsIntent/request.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"session": {
|
||||||
|
"sessionId": "SessionId.8b812aa4-765a-47b6-9949-b203e63c5480",
|
||||||
|
"application": {
|
||||||
|
"applicationId": "amzn1.ask.skill.72fb1025-aacc-4d05-a582-21344940c023"
|
||||||
|
},
|
||||||
|
"attributes": {},
|
||||||
|
"user": {
|
||||||
|
"userId": "amzn1.ask.account.AETXYOXCBUOCTUZE7WA2ZPZNDUMJRRZQNJ2H6NLQDVTMYXBX7JG2RA7C6PFLIM4PXVD7LIDGERLI6AJVK34KNWELGEOM33GRULMDO6XJRR77HALOUJR2YQS34UG27YCPOUGANQJDT4HMRFOWN4Z5E4VVTQ6Z5FIM6TYWFHQ2ZU6HQ47TBUMNGTQFTBIONEGELUCIEUXISRSEKOI"
|
||||||
|
},
|
||||||
|
"new": true
|
||||||
|
},
|
||||||
|
"request": {
|
||||||
|
"type": "IntentRequest",
|
||||||
|
"requestId": "EdwRequestId.cabcff07-8aaa-4fe6-aca0-94440051fc89",
|
||||||
|
"locale": "en-GB",
|
||||||
|
"timestamp": "2016-12-30T19:57:45Z",
|
||||||
|
"intent": {
|
||||||
|
"name": "CaptainsIntent",
|
||||||
|
"slots": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": "1.0"
|
||||||
|
}
|
2
sample-functions/CaptainsIntent/run.sh
Executable file
2
sample-functions/CaptainsIntent/run.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cat request.json | node handler.js -
|
16
sample-functions/CaptainsIntent/sample.json
Normal file
16
sample-functions/CaptainsIntent/sample.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"response": {
|
||||||
|
"outputSpeech": {
|
||||||
|
"type": "PlainText",
|
||||||
|
"text": "There's currently 6 people in space"
|
||||||
|
},
|
||||||
|
"card": {
|
||||||
|
"content": "There's currently 6 people in space",
|
||||||
|
"title": "People in space",
|
||||||
|
"type": "Simple"
|
||||||
|
},
|
||||||
|
"shouldEndSession": true
|
||||||
|
},
|
||||||
|
"sessionAttributes": {}
|
||||||
|
}
|
Reference in New Issue
Block a user