app.js
6.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
var express = require('express');//express 모듈을 사용
var qs = require('querystring')
const request = require('request');//request 모듈을 사용
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'//라인 api
var NOW = new Date()
var YEAR = NOW.getFullYear()
var MONTH= NOW.getMonth()+1
var DATE= NOW.getDate();
var NOWDATE= YEAR.toString().padStart(4, '0') + MONTH.toString().padStart(2, '0') + DATE.toString().padStart(2, '0')
const WEATHER_URL=`http://apis.data.go.kr/1360000/VilageFcstInfoService/getVilageFcst?serviceKey=StHx15%2FPZFKIJvR5AtCu8uyowAtnEYHpAXR%2B5XYYN6OWDt%2BCz15z%2Fxn%2FDiV%2FLN9%2BY5YSPZUPUnCq982CiBupmw%3D%3D&numOfRows=1000&pageNo=1&base_date=${NOWDATE}&base_time=0230&nx=55&ny=127&dataType=JSON`
const TOKEN = 'RbPAXRYWub0evg2yyi7oiHytZsZsE0JtbZgRYZNZDU1vjpJkOwGqwh+aKTYKVhVHh6LZOUVZLl84NQQlNWNbXR9hUhPEiLEK0cie4O3OlKUuEe/3wAsjPu7HbRi1zn9BsR3Qr4pcqmiIKP8HRUKvEwdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "www.osschat.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
var premessage='premessage'
var start ='start'
var check = true
app.use(bodyParser.json());
app.use(express.static('statics'));
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
// request log
console.log('======================', new Date() ,'======================');
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
rain(eventObj.replyToken, eventObj.message.text);
clothes(eventObj.replyToken, eventObj.message.text);
res.sendStatus(200);
});
// 비 말고도 날씨 정보 추가
function rain (replyToken, message){
if(message != '날씨')
{
return
}
request.get(
{
url: WEATHER_URL,
json:true
},(error, response, body) => {
if(!error && response.statusCode == 200) {
console.log(body.message);
for(var item of body.response.body.items.item) {
if(item.category == 'POP') {
if(item.fcstValue >= 50) {
var rainMessage = "꼭! 우산을 챙기세요";
}
else {
var rainMessage= "우산이 굳이 필요하지는 않습니다."
}
}
}
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":replyToken,
"messages":[
{
"type":"text",
"text":rainMessage
}
]
}
},(error, response, body) => {
console.log(body)
});
}
});
}
function clothes (replyToken, message){
if(message != '옷')
{
return
}
request.get(
{
url: WEATHER_URL,
json:true
},(error, response, body) => {
if(!error && response.statusCode == 200) {
console.log(body.message);
for(var item of body.response.body.items.item) {
if(item.category == 'TMX') {
if(item.fcstValue>=28){
var clothesMessage = `날씨가 매우 덥습니다. 건강에 유의해주세요.
추천 옷: 민소매, 반팔, 반바지, 여름용 치마, 린넨 소재의 옷`
}else if(23<=item.fcstValue && item.fcstValue<=27){
var clothesMessage = `날이 덥습니다. 가벼운 옷차림을 추천합니다.
추천 옷: 반팔, 얇은 셔츠, 반바지, 면바지 `
}else if(20<=item.fcstValue && item.fcstValue<=22){
var clothesMessage = `초여름/ 늦여름 날씨입니다. 일교차에 주의해주세요. 추천 옷: 블라우스, 얇은 긴팔 티, 면바지, 슬랙스, 반팔과 가디건`
}else if(17<=item.fcstValue && item.fcstValue<=19){
var clothesMessage=`아직 조금은 쌀쌀합니다. 건강에 유의해주세요. 추천 옷: 얇은 가디건, 니트, 맨투맨, 후드, 긴 바지`
}else if(12<=item.fcstValue && item.fcstValue<=16){
var clothesMessage=`날이 쌀쌀합니다. 추천 옷: 자켓, 가디건, 청자켓, 니트, 청바지`
}else if(9<=item.fcstValue && item.fcstValue<=11){
var clothesMessage =`날이 아직 춥습니다. 따뜻한 옷이 좋습니다. 추천 옷: 트렌치코트, 야상, 점퍼, 기모바지`
}else if(5<=item.fcstValue && item.fcstValue<=8){
var clothesMessage =` 날이 춥습니다. 따뜻하게 입어주세요. 추천 옷: 두꺼운 코트, 히트텍, 가죽 옷, 기모 소재의 옷`
}else{
var clothesMessage= `날씨가 매우 춥습니다. 건강에 유의하세요 .추천 옷: 패딩, 두꺼운 코트, 누빔 옷, 기모 소재의 옷, 히트텍, 목도리, 장갑`
}
}
}
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":replyToken,
"messages":[
{
"type":"text",
"text":clothesMessage
}
]
}
},(error, response, body) => {
console.log(body)
});
}
});
}
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
};
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}