library(jsonlite)
library(httr)

# 공공데이터포털 API 공적마스크 재고현황..
# 부산시 영도구 검색후 해당 Rest API값 할당..
# https://app.swaggerhub.com/apis-docs/Promptech/public-mask-info/20200307-oas3#/

df_mask <- fromJSON("https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/storesByAddr/json?address=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%98%81%EB%8F%84%EA%B5%AC")

str(df_mask)
## List of 3
##  $ address: chr "부산광역시 영도구"
##  $ count  : int 56
##  $ stores :'data.frame': 56 obs. of  9 variables:
##   ..$ addr       : chr [1:56] "부산광역시 영도구 태종로 129 (영선동1가)" "부산광역시 영도구 태종로 98 402호 (대교동2가, 모닝아일랜드)" "부산광역시 영도구 동삼로 32 (동삼동)" "부산광역시 영도구 태종로 106-1, (영선동1가)" ...
##   ..$ code       : chr [1:56] "21801401" "21803021" "21803951" "21804028" ...
##   ..$ created_at : chr [1:56] "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" ...
##   ..$ lat        : num [1:56] 35.1 35.1 35.1 35.1 35.1 ...
##   ..$ lng        : num [1:56] 129 129 129 129 129 ...
##   ..$ name       : chr [1:56] "영신약국" "효승당약국" "보명약국" "메디팜민제약국" ...
##   ..$ remain_stat: chr [1:56] "empty" "few" "empty" "empty" ...
##   ..$ stock_at   : chr [1:56] "2020/03/11 08:45:00" "2020/03/12 11:53:00" "2020/03/12 11:19:00" "2020/03/11 16:21:00" ...
##   ..$ type       : chr [1:56] "01" "01" "01" "01" ...
names(df_mask)
## [1] "address" "count"   "stores"
names(df_mask$stores)
## [1] "addr"        "code"        "created_at"  "lat"         "lng"        
## [6] "name"        "remain_stat" "stock_at"    "type"
# 슬롯에서 데이터프레임 꺼내기...
df_mask <- df_mask$stores
#df_mask <- na.omit(df_mask)
str(df_mask)
## 'data.frame':    56 obs. of  9 variables:
##  $ addr       : chr  "부산광역시 영도구 태종로 129 (영선동1가)" "부산광역시 영도구 태종로 98 402호 (대교동2가, 모닝아일랜드)" "부산광역시 영도구 동삼로 32 (동삼동)" "부산광역시 영도구 태종로 106-1, (영선동1가)" ...
##  $ code       : chr  "21801401" "21803021" "21803951" "21804028" ...
##  $ created_at : chr  "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" ...
##  $ lat        : num  35.1 35.1 35.1 35.1 35.1 ...
##  $ lng        : num  129 129 129 129 129 ...
##  $ name       : chr  "영신약국" "효승당약국" "보명약국" "메디팜민제약국" ...
##  $ remain_stat: chr  "empty" "few" "empty" "empty" ...
##  $ stock_at   : chr  "2020/03/11 08:45:00" "2020/03/12 11:53:00" "2020/03/12 11:19:00" "2020/03/11 16:21:00" ...
##  $ type       : chr  "01" "01" "01" "01" ...
head(df_mask)
names(df_mask)[5] <-"lon"
df_mask
unique(df_mask$remain_stat)
## [1] "empty"  "few"    "plenty" "some"   NA
# 팝업시 재고 수량 상세정보 제공을 위해 파생변수(remain_stat_name) 생성!
df_mask$remain_stat_name[df_mask$remain_stat=="plenty"] = "충분 (100개 이상 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="some"] = "보통 (30~99개 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="few"] = "부족 (30개 미만 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="empty"] = "없음 (1개 미만)"

df_mask
library(leaflet)
pal <- colorFactor(palette=c("springgreen3","orange","red","lightgray"), 
                   levels = c("plenty","some","few","empty"), na.color = "black")

leaflet(df_mask) %>% addProviderTiles(providers$OpenStreetMap) %>%  
  addCircleMarkers(
    radius = 8,  color="black", weight=2,
    fillColor = ~pal(df_mask$remain_stat),
    stroke = TRUE, fillOpacity = 1, 
    lng=df_mask$lon, lat=df_mask$lat,
    label = ~as.character(name), 
    popup = paste0("<b>방역마스크 재고현황 ==></b>","<br>","<b>명칭:",df_mask$name,"</b><br>", 
                   "재고 상태 : ",df_mask$remain_stat_name,"<br>",
                   "입고 일시 : ",df_mask$created_at)
    ) %>%
  addLegend("bottomright", pal = pal, values = ~df_mask$remain_stat,
    title = paste0("공적마스크 재고현황","<br>"),
    labFormat = labelFormat(prefix = ""),
    opacity = 1)
#일자별로 파일 저장
file_name <- paste0("D:/R_Workspace/Mask_status_", Sys.Date(), ".csv")
write.csv(df_mask, file_name, fileEncoding="UTF-8")
# End !!