이런 데이터는 노가다 안해도 이미 다 만들어둔 사람들이 있을 거라고 조언을 들었는데

역시나 공공데이터포털에서 API로 제공하고 있었다


간만에 세금이 제대로 쓰이는 현장을 목격한 듯 하여 매우 뿌듯


본론으로 넘어가서 공휴일 데이터를 추출해보겠다



1. API 키 발급


https://www.data.go.kr/dataset/15012690/openapi.do


"특일 정보" 라는 제목으로 API 를 제공하고 있다


"(천문우주정보) 국경일정보, 공휴일정보, 24절기정보, 잡절정보를 조회하는 서비스 입니다"

라고 소개하고 있는데, 천문우주정보라니 뭔가 우습기도...


아무튼 "활용신청" 버튼을 눌러 API 키를 발급받자


 


그러면 로그인이 필요한 서비스라고하니...

회원가입 > 로그인 을 해준다


센스없게 Internet Explorer 9 이상에 최적화되었다고 기타 브라우저는 사용이 불가능하니 참고하도록하자

여튼 시키는대로 이것저것 써넣고나면 API 키가 발급된다


 


마이페이지 들어가서 노란색 칠해놓은 저기 들어가면 인증키를 확인할 수 있다



2. 데이터 추출


이후는 뭐 그냥 R로 API 콜하고 받은 XML 데이터 파싱하고... 뭐 그게 전부다

예시로 2017년 공휴일을 뽑아보겠다


suppressWarnings({

  library(glue)

  library(XML)

  library(stringr)

})


api.key <- '1에서 발급받은 인증키'


url.format <- 

  'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo?ServiceKey={key}&solYear={year}&solMonth={month}'


holiday.request <- 

  function(key, year, month) glue(url.format)


# request and read data : year 2017

for(m in 1:12){

  data <- xmlToList(holiday.request(api.key, 2017, str_pad(m, 2, pad=0)))

  items <- data$body$items

  for(item in items){

    if(item$isHoliday == 'Y') print(paste(item$dateName, item$locdate, sep=' : '))

  }

}


참고로 glue 함수는 format string 처리하는 함수고,

str_pad 함수는 숫자 앞에 0 넣어서 '8'이 아니라 '08' 로 값을 넣기 위해 사용하였다

 

 

 

정부에서 관리하니 업데이트 문제도 없고...

대체공휴일 같은 것도 알아서 처리할테니 

DB화 시켜서 PHP School 등에 돌아다니는 달력류보다 운영상의 이점이 있다고 하겠다

'PHP 프로그래밍' 카테고리의 다른 글

CMS  (0) 2018.01.14
PHP 이카운트 연동  (0) 2018.01.14
euc-kr에서 독일어  (0) 2018.01.08
그누보드 자동로그인  (0) 2018.01.08
[그누보드] 외부로그인 핸드폰인증  (0) 2017.12.29

+ Recent posts