Files
fg-auto/data/weather.py
2025-06-27 15:11:00 +09:00

75 lines
2.4 KiB
Python

# weather.py
import requests
import json
import re
from datetime import datetime
from config import serviceKey, TODAY
def parse_precip(value):
if value == '강수없음':
return 0.0
elif '1mm 미만' in value:
return 0.5
else:
match = re.search(r"[\d.]+", value)
if match:
return float(match.group())
else:
return 0.0
def get_precipitation_summary(retry=True):
url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst"
params = {
'serviceKey': serviceKey,
'numOfRows': '1000',
'pageNo': '1',
'dataType': 'JSON',
'base_date': TODAY,
'base_time': '0800',
'nx': '57',
'ny': '130'
}
response = requests.get(url, params=params)
try:
data = response.json()
total_rainfall = 0.0
lines = [
'<div class="weatherinfo" style="text-align:center;">',
'<h3 style="font-size: 2em; margin: 20px 0;">[시간대별 강수량]</h3>',
'<table style="border-collapse: collapse; border-spacing: 0; display: inline-table; margin: 0 auto;">',
'<tr>',
'<th style="padding: 0; border: 1px solid #333;">시간</th>',
'<th style="padding: 0; border: 1px solid #333;">강수량</th>',
'</tr>'
]
for item in data['response']['body']['items']['item']:
if item['category'] == 'PCP' and item['fcstDate'] == TODAY:
time = item['fcstTime'] # 예: '1100'
if 900 < int(time) < 2300:
mm = parse_precip(item['fcstValue'])
time_str = f"{time[:2]}:{time[2:]}" # '11:00'
lines.append(f'<tr><td style="padding: 0; border: 1px solid #333;">{time_str}</td><td style="padding: 0; border: 1px solid #333;">{mm}mm</td></tr>')
total_rainfall += mm
lines.append('</table></div>')
lines.append(f'<p style="text-align:center;">영업시간 중 총 예상 강수량: <strong>{total_rainfall:.1f}mm</strong></p>')
return ''.join(lines)
except json.decoder.JSONDecodeError:
if retry:
print("⚠️ JSON 디코드 오류 발생, 재시도 중...")
return get_precipitation_summary(retry=False)
else:
return "⚠️ 응답이 JSON 형식이 아닙니다."
# 테스트용
if __name__ == "__main__":
print(get_precipitation_summary())