공적 마스크 API를 사용해 동네 약국정보를 표시해 보자¶
1.1 API Test¶
In [1]:
import json, requests
url = 'https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/storesByAddr/json?address=서울특별시 송파구 잠실동'
result = json.loads(str(requests.get(url).text))
result['stores'][:5]
Out[1]:
In [2]:
import folium
좌표=(37.5119564733933, 127.088282780728)
 
map_osm = folium.Map(location=좌표, zoom_start=15)
folium.Marker(좌표, popup='잠실'.encode('utf-8')).add_to(map_osm)
map_osm
# jupyter notebook에서는 한글이 깨져서 출력된다.
Out[2]:
In [3]:
#save를 하면 이상없이 정상 출력 된다.
map_osm.save('folium.html')
2.1 한글명을 영문명으로 변경하기 위해 naver api를 활용해 변경한다.¶
In [4]:
import urllib.request
def getRomanCharacters(_str):
    _client_id = "YOUR_CLIENT_ID"
    _client_secret = "YOUR_CLIENT_SECRET"
    # API가 7자리 이상인 경우 결과값이 없음 --> 예외처리
    _addStr= ''
    if ( len(_str) > 7 ) :
        _str = _str[:7]
        _addStr = '...'    
    encText = urllib.parse.quote(_str)
    
    url = "https://openapi.naver.com/v1/krdict/romanization?query=" + encText
    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id",_client_id)
    request.add_header("X-Naver-Client-Secret",_client_secret)
    response = urllib.request.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        jsData = json.loads(response_body)
        if( len(jsData['aResult']) > 0 ):
            first_string = jsData['aResult'][0]['aItems'][0]['name']
        else:
            first_string = "-"
        return first_string.replace(' ','') + _addStr
    else:
        print("Error Code:" + rescode)
        return '-'
    
    
getRomanCharacters('가나다')
Out[4]:
3. 동네 약국 정보를 가져와 지도에 출력해 보자¶
In [5]:
url = 'https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/storesByAddr/json?address=서울특별시 송파구 잠실동'
result = json.loads(str(requests.get(url).text))
결과를 받아와 위도,경도,마스크 남은 수를 sotres에 저장¶
In [6]:
stores = []
for x in result['stores']:
    name = getRomanCharacters(x['name'])
    lat = x['lat']
    lng = x['lng']
    if 'remain_stat' in x.keys():
        remain = x['remain_stat']
    else:
        remain = 'break'
    stores.append([name, lat, lng, remain])
In [7]:
# 재고 상태[100개 이상(녹색): 'plenty' / 30개 이상 100개미만(노랑색): 'some' / 2개 이상 30개 미만(빨강색): 'few' / 1개 이하(회색): 'empty' / 판매중지: 'break']
colorDic={'plenty':'green', 'empty':'gray', 'few':'red', 'some':'beige','break':'black',None:'black'}
In [9]:
loc = (37.5119564733933, 127.088282780728)
map_osm = folium.Map(location=loc, zoom_start=15)
for x in stores:
    
    location = (x[1],x[2])
    cnt = x[3]
    name = x[0]
    popStr = name + '(' + str(cnt) + ')'
    folium.Marker(location, popup=popStr, icon=folium.Icon(color=colorDic[cnt])).add_to(map_osm)
map_osm
Out[9]:
 
댓글 없음:
댓글 쓰기