저기압 두통이 심해서 lambda로 슬랙 두통을 표시하는 앱을 만들었어요
완성
결국 이렇게 될 거야.
두통
저기압 두통이 심하다.오늘도 저기압 때문에 몸 상태가 안 좋아요.
다행히 두통 환자를 대상으로 두통 카페라는 도구가 공개됐다.
고마워요 폴크스 주식회사...
그럼에도 불구하고 매번 골치 아픈 사이트를 보러 갈 때마다 번거롭다.
따라서 슬랙으로 표시할 수 있습니다.
구성은 다음과 같다.간단히
코드를 여기에 놓으세요.
자세한 설치 생략
두통 API 사용법
xhr가 두통 사이트에서 개발자 도구를 열어 디지털 path에 대한 요구를 보냅니다.
이것은 날씨, 기압 정보의 요구이다.
위치:
예를 들어 도쿄 도부시의 상황은 다음과 같다.
https://zutool.jp/api/getweatherstatus/13208
{place_name: "東京都調布市", place_id: "208", prefectures_id: "13", dateTime: "2020-11-13 22",…}
어쨌든prefectures_id + place_id
url로 디자인된 것 같아요.13209를 시도하면
東京都町田市
.이런 느낌으로 대체로 연호라서 컬에서 문의드렸는데 이번에는 도쿄도 내 아이디를 산출했습니다.
대응하면 이런 느낌.
"千代田": 13101
"中央": 13102
"港": 13103
"新宿": 13104
...
도쿄도내 대응표: https://github.com/ShuzoN/zut/blob/master/locations.js어제 오늘 내일 모레
마치다시를 예로 들다.
1시에 방송하면 어제, 오늘, 내일, 모레의 날씨와 기압을 없앨 수 있다.
여기서는 생략했지만 0-23시 사이에는 1시간 간격으로 정보를 얻을 수 있다.
$ curl https://zutool.jp/api/getweatherstatus/13209 | jq
{
"place_name": "東京都町田市",
"place_id": "209",
"prefectures_id": "13",
"dateTime": "2020-11-13 22",
"yesterday": [
{
"time": "0",
"weather": "100",
"temp": "7.1",
"pressure": "1033.4",
"pressure_level": "0"
},
...
{
"time": "23",
"weather": "200",
"temp": "10.8",
"pressure": "1030.1",
"pressure_level": "4"
}
],
"today": [
...
],
"tommorow": [
...
],
"dayaftertomorrow": [
...
]
}
날씨와 기압 수준
방금 요청한 시간마다 아래 정보를 얻을 수 있습니다.
이것에 관해서는 slack 그림 문자에 대응해서 처리합니다.
{
"time": "0",
"weather": "100",
"temp": "7.1",
"pressure": "1033.4",
"pressure_level": "0"
}
날씨는 다음과 같습니다.https://github.com/ShuzoN/zut/blob/master/weather.js exports.get = function (weatherType) {
if (weatherType === "100") { // 晴
return ":sunny:";
}
if (weatherType === "200") { // 曇り
return ":cloud:";
}
if (weatherType === "300") { // 雨
return ":umbrella:";
}
return ":innocent:"; // 例外
};
기압수준은 다음과 같다.(1 본가의 머리가 아파도 ok이기 때문에 적합하다)
exports.get = function (pressureLevelType) {
if (pressureLevelType === "0") { // 🆗
return ":ok:";
}
if (pressureLevelType === "1") { // 🆗
return ":ok:";
}
if (pressureLevelType === "2") { // ⤵︎
return ":arrow_heading_down:";
}
if (pressureLevelType === "3") { // ⚠️
return ":warning:";
}
if (pressureLevelType === "4") { // 💣
return ":bomb:";
}
return ":innocent:"; // 例外 😇
};
성형하여 청산하다.
그리고 머리가 아파서 정보를 얻는 거야-> 성형하면 ok
코드: https://github.com/ShuzoN/zut/blob/master/zutool.js
이번에는 근무 시간에 따라 당일 8~20시 날씨, 기압 정보를 성형했다.
exports.formatter = function (json) {
return json.today
.filter((h) => h.time > 7 && h.time < 21)
.map((h) => {
return `${h.time}時 ${weather.get(h.weather)} ${h.temp}℃ ${
h.pressure
}hPa ${pressureLevel.get(h.pressure_level)}`;
});
}
aws lambda에 대한 디자인
파일 zip
lambda를 운행 환경으로 사용합니다.
이번에 js에서 실시합니다.1script는 읽을 수 없어서 파일 분할을 진행 중입니다.
여러 파일을 처리하기 위해서는 zip화가 필요합니다
프로젝트 경로에서 다음 명령을 실행합니다.
프로젝트명
zut
으로 제작하여 무엇이든 좋습니다.$ zip -r zut.zip .
aws lambda를 통해 함수 만들기
이런 느낌으로 node12를 만들어 움직이는 lamba.
zip 파일을 업로드합니다.
이번에는 설계 절차를 조립하지 않고 수동으로 완성했다.
awsapi gateway에서 단점 만들기
lambda의 디자인만api로 작업할 수 없습니다.
터치하면api gateway를 추가합니다.
api 제작 후
/zut2
경로에post방법 추가이렇게 하면post 요청에 대응할 수 있다.
골문은 슬랙에서 들려온 포스트 리퀘스트다.
슬랙의 Outgoing WebHooks는
application/x-www-form-urlencoded
가 보냈기 때문에 이에 대응한다.병합 요청으로 이동
맵 템플릿을 (으)로 설정합니다.
이것은 http 콘텐츠 type을 보고 지정한 템플릿에 따라 lambda에 보내는 정보를 바꾸는 기능입니다.
application/x-www-form-urlencoded
## See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
## This template will pass through all parameters including path, querystring, header, stage variables, and context through to the integration endpoint via the body/payload
#set($allParams = $input.params())
{
"body-json" : {"body" :$input.json('$')},
"params" : {
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
},
"context" : {
"account-id" : "$context.identity.accountId",
"api-id" : "$context.apiId",
"api-key" : "$context.identity.apiKey",
"authorizer-principal-id" : "$context.authorizer.principalId",
"caller" : "$context.identity.caller",
"cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
"cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
"cognito-identity-id" : "$context.identity.cognitoIdentityId",
"cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
"http-method" : "$context.httpMethod",
"stage" : "$context.stage",
"source-ip" : "$context.identity.sourceIp",
"user" : "$context.identity.user",
"user-agent" : "$context.identity.userAgent",
"user-arn" : "$context.identity.userArn",
"request-id" : "$context.requestId",
"resource-id" : "$context.resourceId",
"resource-path" : "$context.resourcePath"
}
}
네, 아래 경로로post body를 비추십시오.{"body-json" : {"body" :$input.json('$')}}
API에 대한 프로그램을 잊어버리면 반영되지 않으므로 주의하십시오.$ curl https://<your>.execute-api.ap-northeast-1.amazonaws.com/default/zut2 -d '{"text": "渋谷"}'
{"response_type":"in_channel","blocks":[{"type":"section","text":{"type":"mrkdwn","text":"8時 :sunny: 15.7℃ 1026hPa :ok:\n9時 :sunny: 16.8℃ 1026.4hPa :ok:\n10時 :sunny: 17.8℃ 1026.3hPa :ok:\n11時 :sunny: 18.6℃ 1026hPa :ok:\n12時 :sunny: 19.3℃ 1025.4hPa :ok:\n13時 :sunny: 19.7℃ 1025hPa :ok:\n14時 :sunny: 19.9℃ 1025.1hPa :ok:\n15時 :sunny: 19.5℃ 1025.5hPa :ok:\n16時 :sunny: 18.6℃ 1026.2hPa :ok:\n17時 :sunny: 17.2℃ 1027.1hPa :ok:\n18時 :sunny: 15.7℃ 1028hPa :ok:\n19時 :sunny: 14.2℃ 1028.9hPa :ok:\n20時 :sunny: 12.8℃ 1029.6hPa :ok:"}}]}%
이렇게 curl - aws apigateway + lambda - 頭痛ーる
의 합작이 끝났다.slack 및 aws lambda 링크
슬랙 앱을 만듭니다.
zut
라고도 하죠.Slash Commands -> create new command
.request url 방금 만든 awsapi gateway의 url을 입력하십시오.
이렇게 하면 완성된다.다음은 워크스페이스에 대한 로그인입니다.
install app -> install app to workspace
와 추가 워크스페이스에 응용 프로그램을 넣으려고 시도합니다.대상의workspace에
/zut
를 입력하면 해당 시내의 이름이 나온다.그리고
/zut 渋谷
처럼 치면 사용할 수 있어요.대단히 기쁘다.그러니까 이번엔 여기까지.
여러분도 한번 써보세요.
Reference
이 문제에 관하여(저기압 두통이 심해서 lambda로 슬랙 두통을 표시하는 앱을 만들었어요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/shuzon/articles/8ce0d4bafea9e28d9edd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)