안녕하세요.
이번에는 카카오 봇을 통해서 현재 날씨를 받아오겠습니다.
저는 모바일 네이버에 있는 날씨를 사용하도록 하겠습니다.
의정부 날씨에 대한 div태그를 보면 엄청 많이 포함된 것을 볼 수 있습니다.
이것을 그대로 받아서 사용하게 되면 당연히 보기 힘들어질 것입니다.
여러 번 요청을 하자니 시간은 오래 걸리니 받은 데이터를 변수에 담아서 처리해주도록 하겠습니다.
1. 날씨 데이터 받아오기
1
2
3
4
5
6
7
8
9
10
11
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
if(msg == "날씨") {
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=의정부%20날씨").get();
w_stu = data.select(".text_info .figure_text");
replier.reply(w_stu);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
if(msg == "날씨") {
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=의정부%20날씨").get();
w_stu = data.select(".text_info .figure_text");
w_num = data.select(".inner span.figure_result");
replier.reply(w_num);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
if(msg == "날씨") {
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=의정부%20날씨").get();
w_stu = data.select(".text_info .figure_text");
w_num = data.select(".inner span.figure_result");
now_temp = data.select(".weather_graphic .temperature_text > strong");
replier.reply(now_temp);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
if(msg == "날씨") {
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=의정부%20날씨").get();
w_stu = data.select(".text_info .figure_text");
w_num = data.select(".inner span.figure_result");
now_temp = data.select(".weather_graphic .temperature_text > strong");
up_temp = data.select(".up_temperature strong");
down_temp = data.select(".down_temperature strong");
feel_temp = data.select(".feeling_temperature strong");
text = data.select(".temperature_info .summary");
replier.reply(text);
}
}
|
cs |
2. 데이터 정리하기
이렇게 많은 데이터들을 확보했으니 정리해주도록 합니다.
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
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
if(msg == "날씨") {
var str = "[현재 날씨]\n";
var str2 = "";
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=의정부%20날씨").get();
w_stu = data.select(".text_info .figure_text") + "";
w_num = data.select(".inner span.figure_result") + "";
now_temp = data.select(".weather_graphic .temperature_text > strong") + "";
up_temp = data.select(".up_temperature strong") + "";
down_temp = data.select(".down_temperature strong") + "";
feel_temp = data.select(".feeling_temperature strong") + "";
text = data.select(".temperature_info .summary") + "";
w_stu = w_stu.replace(/<[^>]+>/g,"");
w_stu = w_stu.split("\n");
w_num = w_num.replace(/<[^>]+>/g,""); w_num = w_num.split("\n");
now_temp = now_temp.replace(/<[^>]+>/g,""); now_temp = now_temp.split("\n");
up_temp = up_temp.replace(/<[^>]+>/g,""); up_temp = up_temp.split("\n");
down_temp = down_temp.replace(/<[^>]+>/g,""); down_temp = down_temp.split("\n");
feel_temp = feel_temp.replace(/<[^>]+>/g,""); feel_temp = feel_temp.split("\n");
text = text.replace(/<[^>]+>/g,""); text = text.split("\n");
//문자열 필터링
text = text[0].split("아요");
now_temp = now_temp[0].split("현재 온도");
//출력
str +=
"온도 : " + now_temp[0] + "\n" +
"최고:" + up_temp + " | 최저:" + down_temp + " | 체감:" + feel_temp + "\n" +
text[0] + "습니다. (" + text[1] + ")";
str2 =
"미세먼지 : " + w_num[0] + "(" + w_stu[0] + ") \n" +
"초미세먼지 : " + w_num[1] + "(" + w_stu[1] + ") \n" +
"자외선 : " + w_num[2] + "(" + w_stu[2] + ")";
replier.reply(str);
replier.reply(str2);
}
}
|
cs |
3. 마무리 작업(지역 입력하기)
지금 이상태로는 의정부 날씨만 검색하게 됩니다.
다른 지역을 입력하면 날씨정보가 나올 수 있도록 해봅시다.
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
|
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
Weather(msg, replier);
}
function Weather(msg, replier) {
msg = msg.split(" ");
if(msg[0] == "날씨" && msg[1] != undefined && msg[2] == undefined) {
var str = "[현재 " + msg[1] + " 날씨]\n";
var str2 = "";
var data=org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?&query=" + msg[1] + "%20날씨").get();
w_stu = data.select(".text_info .figure_text") + "";
w_num = data.select(".inner span.figure_result") + "";
now_temp = data.select(".weather_graphic .temperature_text > strong") + "";
up_temp = data.select(".up_temperature strong") + "";
down_temp = data.select(".down_temperature strong") + "";
feel_temp = data.select(".feeling_temperature strong") + "";
text = data.select(".temperature_info .summary") + "";
w_stu = w_stu.replace(/<[^>]+>/g,"");
w_stu = w_stu.split("\n");
w_num = w_num.replace(/<[^>]+>/g,""); w_num = w_num.split("\n");
now_temp = now_temp.replace(/<[^>]+>/g,""); now_temp = now_temp.split("\n");
up_temp = up_temp.replace(/<[^>]+>/g,""); up_temp = up_temp.split("\n");
down_temp = down_temp.replace(/<[^>]+>/g,""); down_temp = down_temp.split("\n");
feel_temp = feel_temp.replace(/<[^>]+>/g,""); feel_temp = feel_temp.split("\n");
text = text.replace(/<[^>]+>/g,""); text = text.split("\n");
//문자열 필터링
text = text[0].split("아요");
now_temp = now_temp[0].split("현재 온도");
//출력
str +=
"온도 : " + now_temp[0] + "\n" +
"최고:" + up_temp + " | 최저:" + down_temp + " | 체감:" + feel_temp + "\n" +
text[0] + "습니다. (" + text[1] + ")";
str2 =
"미세먼지 : " + w_num[0] + "(" + w_stu[0] + ") \n" +
"초미세먼지 : " + w_num[1] + "(" + w_stu[1] + ") \n" +
"자외선 : " + w_num[2] + "(" + w_stu[2] + ")";
replier.reply(str);
replier.reply(str2);
}
}
|
cs |
'카카오봇' 카테고리의 다른 글
카카오봇 만들기 (8) : 학습 기능 넣기 (0) | 2020.03.17 |
---|---|
카카오봇 만들기 (7) : 실시간 지하철 정보 받아오기 (0) | 2020.03.17 |
카카오봇 만들기 (5) : 영화 순위 받아오기 (0) | 2020.03.17 |
카카오봇 만들기 (4) : 실시간 검색 받아오기 (0) | 2020.03.16 |
카카오봇 만들기 (3) : 자바스크립트를 이용하여 채팅해보자 (1) | 2020.03.16 |
댓글