김건희

[Merge] 'feature/weather' into 'backend'

...@@ -3667,9 +3667,9 @@ ...@@ -3667,9 +3667,9 @@
3667 } 3667 }
3668 }, 3668 },
3669 "bson": { 3669 "bson": {
3670 - "version": "4.6.4", 3670 + "version": "4.6.3",
3671 - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz", 3671 + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz",
3672 - "integrity": "sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ==", 3672 + "integrity": "sha512-rAqP5hcUVJhXP2MCSNVsf0oM2OGU1So6A9pVRDYayvJ5+hygXHQApf87wd5NlhPM1J9RJnbqxIG/f8QTzRoQ4A==",
3673 "requires": { 3673 "requires": {
3674 "buffer": "^5.6.0" 3674 "buffer": "^5.6.0"
3675 } 3675 }
...@@ -8849,15 +8849,15 @@ ...@@ -8849,15 +8849,15 @@
8849 } 8849 }
8850 }, 8850 },
8851 "mongoose": { 8851 "mongoose": {
8852 - "version": "6.3.4", 8852 + "version": "6.3.3",
8853 - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.3.4.tgz", 8853 + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.3.3.tgz",
8854 - "integrity": "sha512-UP0azyGMdY+2YNbJUHeHhnVw5vPzCqs4GQDUwHkilif/rwmSZktUQhQWMp1pUgRNeF2JC30vWGLrInZxD7K/Qw==", 8854 + "integrity": "sha512-bAGuf+6mXuVjKReNcOGjdI05y9g0JXnRpZ3/PBN3kVXIn3rbhbFwR/lPbuwtsBsWhlblMK8tieDeFAVzV6yhww==",
8855 "requires": { 8855 "requires": {
8856 "bson": "^4.6.2", 8856 "bson": "^4.6.2",
8857 "kareem": "2.3.5", 8857 "kareem": "2.3.5",
8858 "mongodb": "4.5.0", 8858 "mongodb": "4.5.0",
8859 "mpath": "0.9.0", 8859 "mpath": "0.9.0",
8860 - "mquery": "4.0.3", 8860 + "mquery": "4.0.2",
8861 "ms": "2.1.3", 8861 "ms": "2.1.3",
8862 "sift": "16.0.0" 8862 "sift": "16.0.0"
8863 }, 8863 },
...@@ -8875,9 +8875,9 @@ ...@@ -8875,9 +8875,9 @@
8875 "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 8875 "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew=="
8876 }, 8876 },
8877 "mquery": { 8877 "mquery": {
8878 - "version": "4.0.3", 8878 + "version": "4.0.2",
8879 - "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", 8879 + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.2.tgz",
8880 - "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", 8880 + "integrity": "sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA==",
8881 "requires": { 8881 "requires": {
8882 "debug": "4.x" 8882 "debug": "4.x"
8883 } 8883 }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
10 "express": "^4.18.1", 10 "express": "^4.18.1",
11 "express-session": "^1.17.3", 11 "express-session": "^1.17.3",
12 "http-proxy-middleware": "^2.0.6", 12 "http-proxy-middleware": "^2.0.6",
13 - "mongoose": "^6.3.4", 13 + "mongoose": "^6.3.3",
14 "nodemon": "^2.0.16", 14 "nodemon": "^2.0.16",
15 "react": "^18.1.0", 15 "react": "^18.1.0",
16 "react-dom": "^18.1.0", 16 "react-dom": "^18.1.0",
......
...@@ -2,11 +2,13 @@ var request = require('request'); ...@@ -2,11 +2,13 @@ var request = require('request');
2 let express = require('express'); 2 let express = require('express');
3 let app=express(); 3 let app=express();
4 let bodyParser = require('body-parser'); 4 let bodyParser = require('body-parser');
5 -let session = require('express-session') 5 +let session = require('express-session');
6 +let cors = require('cors');
6 7
7 app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) 8 app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
8 app.use(bodyParser.urlencoded({ extended: false })); 9 app.use(bodyParser.urlencoded({ extended: false }));
9 app.use(bodyParser.json()); 10 app.use(bodyParser.json());
11 +app.use(cors());
10 //nx,ny구하기 12 //nx,ny구하기
11 13
12 //변수들 14 //변수들
...@@ -14,10 +16,21 @@ let curaddress; ...@@ -14,10 +16,21 @@ let curaddress;
14 var url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst'; 16 var url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst';
15 var queryParams = '?' + encodeURIComponent('serviceKey') + '=3OcUyvx97Vx2YikiZ9IHyRQ6suapku7Xn8VlefQKQWrGIFOGaejhbevwagcubdHfSiQAqJwCV5lyIutw0%2BsppA%3D%3D'; /* Service Key*/ 17 var queryParams = '?' + encodeURIComponent('serviceKey') + '=3OcUyvx97Vx2YikiZ9IHyRQ6suapku7Xn8VlefQKQWrGIFOGaejhbevwagcubdHfSiQAqJwCV5lyIutw0%2BsppA%3D%3D'; /* Service Key*/
16 18
17 - 19 +//오늘의 날짜 구하기
18 - 20 +let today=new Date();
19 - 21 +let CurDay=today.getFullYear().toString();
20 - 22 +if(today.getMonth()<9){
23 + CurDay+="0"+(today.getMonth()+1).toString();
24 +}
25 +else{
26 + CurDay+=(today.getMonth()+1).toString();
27 +}
28 +if(today.getDate()<10){
29 + CurDay+="0"+today.getDate().toString();
30 +}
31 +else{
32 + CurDay+=today.getDate().toString();
33 +}
21 34
22 //nx,ny구하기 35 //nx,ny구하기
23 const xlsx=require('xlsx') 36 const xlsx=require('xlsx')
...@@ -25,92 +38,59 @@ const excel=xlsx.readFile('location.xlsx'); ...@@ -25,92 +38,59 @@ const excel=xlsx.readFile('location.xlsx');
25 const sheet=excel.SheetNames[0]; 38 const sheet=excel.SheetNames[0];
26 const first=excel.Sheets[sheet]; 39 const first=excel.Sheets[sheet];
27 const jsonData=xlsx.utils.sheet_to_json(first,{defval:""}); 40 const jsonData=xlsx.utils.sheet_to_json(first,{defval:""});
28 -let nx,ny,add; 41 +let nx,ny;
29 -app.post('/address', (req, res) => { 42 +app.post('/api/address', (req, res) => {
30 let i=0; 43 let i=0;
31 while(i<3788){ 44 while(i<3788){
32 if(jsonData[i].address1==req.body.address1 && jsonData[i].address2==req.body.address2 && jsonData[i].address3==req.body.address3){ 45 if(jsonData[i].address1==req.body.address1 && jsonData[i].address2==req.body.address2 && jsonData[i].address3==req.body.address3){
33 nx=jsonData[i].nx; 46 nx=jsonData[i].nx;
34 ny=jsonData[i].ny; 47 ny=jsonData[i].ny;
35 curaddress=jsonData[i]; 48 curaddress=jsonData[i];
36 - queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /* */ 49 + res.json({nx, ny});
37 - queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('1000'); /* */
38 - queryParams += '&' + encodeURIComponent('dataType') + '=' + encodeURIComponent('JSON'); /* */
39 - queryParams += '&' + encodeURIComponent('base_date') + '=' + encodeURIComponent(CurDay); /* */
40 - queryParams += '&' + encodeURIComponent('base_time') + '=' + encodeURIComponent('0200'); /* */
41 - queryParams += '&' + encodeURIComponent('nx') + '=' + encodeURIComponent(nx); /*nx*/
42 - queryParams += '&' + encodeURIComponent('ny') + '=' + encodeURIComponent(ny); /*ny*/
43 - res.send("좌표는 "+nx+" "+ny+"입니다.");
44 - add=req.body.address1+' '+req.body.address2+' '+req.body.address3;
45 break; 50 break;
46 } 51 }
47 i+=1; 52 i+=1;
48 } 53 }
49 }); 54 });
50 55
51 -
52 -//오늘의 날짜 구하기
53 -let today=new Date();
54 -let CurDay=today.getFullYear().toString();
55 -if(today.getMonth()<9){
56 - CurDay+="0"+(today.getMonth()+1).toString();
57 -}
58 -else{
59 - CurDay+=(today.getMonth()+1).toString();
60 -}
61 -if(today.getDate()<10){
62 - CurDay+="0"+today.getDate().toString();
63 -}
64 -else{
65 - CurDay+=today.getDate().toString();
66 -}
67 -
68 -
69 -
70 -
71 -
72 -
73 -
74 -
75 let a3=[], a4=[], a5=[], a6=[], a7=[], a8=[], a9=[], a10=[], a11=[], a12=[], a13=[], a14=[], a15=[], a16=[], a17=[], a18=[], a19=[], a20=[], a21=[], a22=[], a23=[]; 56 let a3=[], a4=[], a5=[], a6=[], a7=[], a8=[], a9=[], a10=[], a11=[], a12=[], a13=[], a14=[], a15=[], a16=[], a17=[], a18=[], a19=[], a20=[], a21=[], a22=[], a23=[];
76 //입력받기 57 //입력받기
77 -app.post('/mainpage',(req,res)=>{ 58 +app.post('/api/weather',(req,res)=>{
78 - request({ 59 + const nx = req.body.dotX;
79 - url: url + queryParams, 60 + const ny = req.body.dotY;
80 - method: 'GET' 61 +
81 - }, function (error, response, body) { 62 + queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /* */
82 - let ex=JSON.parse(body); 63 + queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('1000'); /* */
83 - let item=ex.response.body.items.item; 64 + queryParams += '&' + encodeURIComponent('dataType') + '=' + encodeURIComponent('JSON'); /* */
84 - // console.log(items); 65 + queryParams += '&' + encodeURIComponent('base_date') + '=' + encodeURIComponent(CurDay); /* */
85 - let i=0; 66 + queryParams += '&' + encodeURIComponent('base_time') + '=' + encodeURIComponent('0200'); /* */
86 - let a=[];//, a4=[], a5=[], a6=[], a7=[], a8=[], a9=[], a10=[], a11=[], a12=[], a13=[], a14=[], a15=[], a16=[], a17=[], a18=[], a19=[], a20=[], a21=[], a22=[], a23=[]; 67 + queryParams += '&' + encodeURIComponent('nx') + '=' + encodeURIComponent(nx); /*nx*/
87 - while(item[i].fcstDate==CurDay){ 68 + queryParams += '&' + encodeURIComponent('ny') + '=' + encodeURIComponent(ny); /*ny*/
88 - if(item[i].category=='POP' || item[i].category=='TMP'){ 69 +
89 - a.push(item[i]); 70 + request({
90 - } 71 + url: url + queryParams,
91 - i+=1; 72 + method: 'GET'
92 - } 73 + }, function (error, response, body) {
93 - let result=[]; 74 + let ex=JSON.parse(body);
94 - i=0; 75 + let item=ex.response.body.items.item;
95 - while(i<a.length){ 76 +
96 - let str=CurDay+' '+add+'의 '+a[i].fcstTime[0]+a[i].fcstTime[1]+'시 기온은 '+a[i].fcstValue+'이고, 강수확률은 '+a[i+1].fcstValue+'이다.'; 77 + let i=0;
97 - result.push(str); 78 + let a=[];//, a4=[], a5=[], a6=[], a7=[], a8=[], a9=[], a10=[], a11=[], a12=[], a13=[], a14=[], a15=[], a16=[], a17=[], a18=[], a19=[], a20=[], a21=[], a22=[], a23=[];
98 - i+=2; 79 + while(item[i].fcstDate==CurDay){
99 - }//정보를 string으로 저장. 80 + if(item[i].category=='POP' || item[i].category=='TMP'){
100 - // while(i<a.length){ 81 + a.push(item[i]);
101 - // let Json={today:CurDay,time:a[i].fcstTime[0]+a[i].fcstTime[1],temperature:a[i].fcstValue,rainPer:a[i+1].baseTime.fcstValue}; 82 + }
102 - // result.push(Json); 83 + i+=1;
103 - // i+=2; 84 + }
104 - // }//정보를 Json형식으로 저장. 85 + let result=[];
105 - //return result를 해주고 싶은데 방법을 잘 모르겠음 86 + i=0;
106 - res.send(result); 87 + while(i<a.length){
107 - });//pop:강수확률 tmp:한시간 기온 88 + let Json={today:CurDay,time:a[i].fcstTime[0]+a[i].fcstTime[1],temperature:a[i].fcstValue,rainPer:a[i+1].fcstValue};
89 + result.push(Json);
90 + i+=2;
91 + }
92 + res.json(result);
93 + });//pop:강수확률 tmp:한시간 기온
108 }); 94 });
109 95
110 -
111 -
112 -// app.post('/mainpage', (req, res) => {
113 -
114 -// });
115 -
116 app.listen(4000, () => console.log('Server On 5000')); 96 app.listen(4000, () => console.log('Server On 5000'));
...\ No newline at end of file ...\ No newline at end of file
......