import requests
import random
from xml.etree import ElementTree as ET
import pandas as pd

# 지역코드
local = {'서울' : '01', '세종' : '02', '부산' : '03', '대구' : '04', '광주' : '05',
'인천' : '06', '대전' : '07', '울산' : '08', '경기' : '09', '강원' : '10',
'충남' : '11', '충북' : '12', '전남' : '13', '전북' : '14', '경남' : '15', '경북' : '16', '제주' : '17'}

# API 키
SKEY = '04ivMBs+T+/URYubuW0VoEysuWeCU4Oj2pts0CujIh1h3rcbtP2XmmgCOmIhHyBRGI1uGJEBhrY0cuac9lHz0w=='

# 산불 데이터 로드
fire_data_path = '2022 전국산불데이터.xlsx'  # 파일 경로
fire_df = pd.read_excel(fire_data_path)

# 위도와 경도가 있는 데이터만 필터링
fire_df = fire_df.dropna(subset=['위도', '경도'])

# API URL
url = '<http://apis.data.go.kr/1400377/mtweather/mountListSearch>'

# 결과를 저장할 데이터프레임 초기화
weather_data = []

# 산불 발생 지역에 대한 기상 데이터를 가져오기
for _, row in fire_df.iterrows():
    city = row['시']
    latitude = row['위도']
    longitude = row['경도']
    fire_date = row['발생연월일']  # 발생 연월일 (YYYYMMDD 형식)
    fire_time = row['발생시']  # 발생 시 (HHMM 형식)
    # 발생시에서 초 단위와 ':' 제거 (HH:MM:SS -> HHMM 형식)
    fire_time = fire_time.replace(':', '')[:4]  # 예: '12:30:45' -> '1230'

    tm = str(fire_date) + str(fire_time)  # 발생 연월일 + 발생 시간 (YYYYMMDDHHMM 형식)
    print(tm)

    while True:
      c = random.choice(list(local.keys()))
      if(c != city):
        break

    print(city, c)

    # API 파라미터 설정
    params = {
        'serviceKey': SKEY,
        'numOfRows': '1000',
        'pageNo': '1',
        '_type': 'xml',
        #'localArea' : '01', #지역 코드 (10: 강원도)
        'localArea' : local[c],
        'tm': tm  # 발생 연월일 + 발생 시간 (YYYYMMDDHHMM 형식)
    }

    # API 요청
    response = requests.get(url, params=params)

    # 응답 데이터 처리
    if response.status_code == 200:
        root = ET.fromstring(response.content)
        for item in root.findall('.//item'):
            print(item)
            weather_data.append({
                '시': c,
                '산이름': item.find('obsname').text if item.find('obsname') is not None else None,
                '관측시간': item.find('tm').text if item.find('tm') is not None else None,
                '10m 풍향': item.find('wd10m').text if item.find('wd10m') is not None else None,
                '10m 풍속': item.find('ws10m').text if item.find('ws10m') is not None else None,
                '2m 풍향': item.find('wd2m').text if item.find('wd2m') is not None else None,
                '2m 풍속': item.find('ws2m').text if item.find('ws2m') is not None else None,
                '2미터 습도': item.find('hm2m').text if item.find('hm2m') is not None else None,
            })
    else:
        print(f"Failed to retrieve data for {c}: {response.status_code}")

# 기상 데이터프레임 생성
weather_df = pd.DataFrame(weather_data)
output_path = 'non_fire_weather_data.xlsx'
weather_df.to_excel(output_path, index=False, sheet_name='비산불 지역 기상 데이터')