import pandas as pd
import requests

### pip install pandas, pip install requests 할것.
### <https://www.vworld.kr/v4po_main.do> 해당 주소로 들어가 api 키를 요청해야 한다. 회원가입 필요.
### 파이썬 프로그램과 동일한 위치에 xlsx 파일 혹은 csv 파일이 있어야 한다. 
file_path = 'kid.xlsx'
df = pd.read_excel(file_path)

# API 요청 함수
def get_coordinates(address):
    apiurl = "<https://api.vworld.kr/req/address?">
    params = {
        "service": "address",
        "request": "getcoord",
        "crs": "epsg:4326",
        "address": address,
        "format": "json",
        "type": "road",
        "simple": "true",
        "key": ""  # API 키는 적절히 대체해 주세요.
    }
    try:
        response = requests.get(apiurl, params=params)
        print(response)
        if response.status_code == 200:
            response_json = response.json()
            print(response_json)
            if response_json['response']['status'] == 'OK':  # 상태 확인
                lon = response_json['response']['result']['point']['x']
                lat = response_json['response']['result']['point']['y']
                print(lon,lat)
                return lon, lat
    except Exception as e:
        print(f"Error fetching coordinates: {e}")
    return None, None

coordinates = []

### '파일명을 제대로 확인 해야하지만 대부분 주소 혹은 address이다.'
for index, address in enumerate(df['주소']):
    lon, lat = get_coordinates(address)
    if lon and lat:  # 좌표가 정상적으로 찾아졌다면 리스트에 추가
        coordinates.append({'주소': address, '경도': lon, '위도': lat})
    else:
        print(f"Address not found or error for: {address}")  # 에러 메시지 출력
        coordinates.append({'주소': address, '경도': 0, '위도': 0})
    # 피드백을 바탕으로, 일정 개수(예: 100)의 요청마다 상태를 확인
    if (index + 1) % 100 == 0:
        print(f"Processed {index + 1} addresses.")

result_df = pd.DataFrame(coordinates)
### file_path를 다른 파일명으로 변경해야지 중복없이 이용 가능하다.
### 0,0으로 나온 데이터셋의 경우 따로 해당 주소만 직접 검색해서 입력 해야 한다.
result_file_path = 'kid_result.xlsx'
result_df.to_excel(result_file_path, index=False)

print(f'Results saved to {result_file_path}')

추후 위도 경도가 0,0 으로 나오는 데이터의 경우 https://www.findlatlng.org/ 해당 사이트에서 주소를 입력해서 추가 해주시면 됩니다.