공적 마스크 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]:
댓글 없음:
댓글 쓰기