-
Notifications
You must be signed in to change notification settings - Fork 0
/
weatherAPI.py
141 lines (114 loc) · 4.78 KB
/
weatherAPI.py
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
#!/usr/bin/env python
# coding: utf-8
# In[ ]:
from flask import Flask, request, jsonify
import requests
import json
import xmltodict
from collections import OrderedDict
import pandas as pd
from flask_cors import CORS
df = pd.read_csv('list_50.csv')
df_event= pd.read_csv('aaa .csv')
app = Flask(__name__)
CORS(app, resources={r'/*': {'origins': ['https://seoul-weather-fe.vercel.app', 'http://localhost:3000', 'https://seoul-weather-fe-brown-storming.vercel.app','https://seoul-weather-fe-git-main-brown-storming.vercel.app','https://seoul-weather-fe-git-pwa-brown-storming.vercel.app']}})
def get_api(gu):
if gu == '강동구':
gu = '송파구'
elif gu == '강서구' or gu == '양천구':
gu = '영등포구'
elif gu =='동대문구':
gu = '중구'
elif gu == '성북구':
gu = '종로구'
elif gu =='중랑구':
gu = '광진구'
elif gu =='서대문구':
gu = '종로구'
#공공데이터 api 요청
name = df[df['구'] == gu]['장소명'].values[0]
url = 'http://openapi.seoul.go.kr:8088/6351784378646a663631754e72636a/xml/citydata/1/5/' + name
response = requests.get(url)
jsonR = json.dumps(xmltodict.parse(response.text), indent = 4)
data = json.loads(jsonR)
return data
@app.route('/user/<gu>')
def get_main(gu):
data = get_api(gu)
#데이터 가공
gu = data['SeoulRtd.citydata']['CITYDATA']['COVID_19_STTS']['COVID_19_STTS']["GU_NM"]
temp = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['TEMP']
sensible_tmp = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['SENSIBLE_TEMP']
sky_stts = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['FCST24HOURS']['FCST24HOURS'][0]['SKY_STTS']
#최고/최저
max_tmp = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['MAX_TEMP']
min_tmp = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['MIN_TEMP']
#강수량
rain_pre = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['PRECIPITATION']
#미세먼지, 초미세먼지
pm10 = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['PM10']
pm25 = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['PM25']
#풍속
wind = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['WIND_SPD']
#일출, 일몰
sunset = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['SUNSET']
sunrise = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['SUNRISE']
#자외선
uv = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['UV_INDEX']
humiditiy = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['HUMIDITY']
item = []
if int(pm10) > 81 or int(pm25) > 35:
item.append('mask')
if rain_pre != '-':
item.append('umbrella')
if sky_stts == '맑음':
item.append('sunglass')
if uv == '높음':
item.append('suncream')
main_data = OrderedDict()
main_data['sensible_tmp'] = sensible_tmp
main_data["gu"] = gu
main_data["temp"] = temp
main_data["sky_stts"] = sky_stts
main_data['max_tmp'] = max_tmp
main_data['min_tmp'] = min_tmp
main_data['rain_pre'] = rain_pre
main_data['pm10'] = pm10
main_data['pm25'] = pm25
main_data['wind'] = wind
main_data['sunset'] = sunset
main_data['sunrise'] = sunrise
main_data['uv'] = uv
main_data['humiditiy'] = humiditiy
main_data['item'] = item
return json.dumps(main_data, ensure_ascii=False, indent="\t")
@app.route('/user/precpt/<gu>')
def get_precpt(gu):
data = get_api(gu)
weather = data['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['FCST24HOURS']['FCST24HOURS']
return json.dumps(weather, ensure_ascii=False, indent="\t")
@app.route('/user/event/<gu>')
def get_event(gu):
# json_data = OrderedDict()
dataset = []
api = get_api(gu)
weather = api['SeoulRtd.citydata']['CITYDATA']['WEATHER_STTS']['WEATHER_STTS']['PRECPT_TYPE']
df_event2 = df_event[df_event['자치구']==gu]
if weather == '비':
act = df_event2[df_event2['실내'] == '실내']
else :
act = df_event2
for index, row in act.iterrows():
# data = {}
data = OrderedDict()
data['event'] = row['공연/행사명']
data['type'] = row['분류']
data['time'] = row['날짜/시간']
data['intro'] = row['프로그램소개']
data['page'] = row['홈페이지?주소']
dataset.append(data)
# json_data['data'] = dataset
return jsonify(dataset)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=False, port=5001)
# In[ ]: