카카오 API와 openpyxl를 이용한 서울시 무인발급기 위치 확인하기

https://www.minwon.go.kr/new_info/customer/AA090_CM010_No_man_popup.jsp

  • '설치장소' 이미지를 누르면 xls 다운로드됨
In [1]:
import openpyxl
import requests
import folium

openpyxl을 이용하여 무인발급기 주소, 발급기명 저장

In [2]:
ex = openpyxl.load_workbook('./2020년04월30일기준_무인민원발급창구_설치장소_및_운영시간(민원24).xlsx')
muin = ex['4월30일']
num = 2
address = []
name = []
while True:
    if '서울' in muin.cell(row=num, column=6).value:
        # 주소 저장
        address_b = muin.cell(row=num, column=6).value
        address_a = address_b.split('(')[0]
        address.append(address_a)
        # 이름 저장
        name_b = muin.cell(row=num, column=3).value
        name.append(name_b)
        num+=1
        continue
    else:
        break
# print(len(address))
# print(len(name))

kakao API를 이용한 위도,경도 얻는 함수 작성

In [3]:
def getLatLng(address):
    app_key = 'KakaoAK ' + '__REST API Key__'
    url = 'https://dapi.kakao.com/v2/local/search/address.json' # endpoint
    params = {
        'query' : address,
        'page' : '',
        'AddressSize' : ''
    }
    headers = {'Authorization' : app_key}
    response = requests.get(url, headers=headers, params=params)
    status_code = response.status_code
    resp = response.json()
    
    if resp['documents'] != []:
        longitude = resp['documents'][0]['x'] # 경도
        latitude = resp['documents'][0]['y'] # 위도
        return longitude, latitude
    else:
        return (0, 0)
In [4]:
xpoint = []
ypoint = []
for i in address:
    x, y= getLatLng(i)
    xpoint.append(x) # 경도 저장
    ypoint.append(y) # 위도 저장

지도 및 마커 추가

In [5]:
map_list = folium.Map(location=[37.566659527,126.978346859], zoom_start=10)

for item in range(len(address)):
    latitude = float(ypoint[item])
    longtitude = float(xpoint[item])
    # 예외처리 : 서울특별시 용산구 이태원로 22(용산동3가)의 정보 못불러옴
    if latitude == 0:
        continue
    folium.Marker(
        location = [latitude, longtitude],
        popup = name[item],
        icon=folium.Icon(color='red', icon='glyphicon glyphicon-print')
        # icon 적용 할 때 부트스트랩 최신버전을 사용하면 표시안됨. 3버전 이용
    ).add_to(map_list)
map_list
Out[5]:
Make this Notebook Trusted to load map: File -> Trust Notebook