# 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 = [ '
', '

[시간대별 예상 강수량]

', '', '', '', '', '', '', '', '' ] for item in data['response']['body']['items']['item']: if item['category'] == 'PCP' and item['fcstDate'] == TODAY: time = item['fcstTime'] if 900 < int(time) < 2300: mm = parse_precip(item['fcstValue']) time_str = f"{time[:2]}:{time[2:]}" lines.append(f'') total_rainfall += mm lines.append(f'') lines.append('
시간강수량
{time_str}{mm}mm
영업시간 중 총 예상 강수량: {total_rainfall:.1f}mm

08:00 파주 조리읍 기상청 단기예보 기준

') return ''.join(lines) except json.decoder.JSONDecodeError: if retry: print("JSON 디코드 오류 발생, 재시도 중...") time.sleep(3) # 3초 대기 return get_precipitation_summary(retry=False) else: print("응답이 JSON 형식이 아닙니다.") return '' # 테스트용 if __name__ == "__main__": print(get_precipitation_summary())