본문으로 바로가기

[Open API] 국경일 & 공휴일 구하기

category Develop/the code 2021. 11. 4. 17:24

 


 

1. 공공데이터포털 접속 후 회원가입

 

https://www.data.go.kr/index.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

회원가입 (인증키가 발송되므로 수신가능한 이메일을 적어야 한다)

 

 

 

2. "특일 정보제공 서비스" 활용신청

 

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

 

한국천문연구원_특일 정보

(천문우주정보)국경일정보, 공휴일정보, 기념일정보, 24절기정보, 잡절정보를 조회하는 서비스 입니다. 활용시 날짜, 순번, 특일정보의 분류, 공공기관 휴일 여부, 명칭을 확인할 수 있습니다.

www.data.go.kr

 

2-1. 활용신청

 

2-2. 활용목적 작성

 

2-3. 활용신청 후 즉시승인됨. 붉은색 점선상자로 표시한 부분 클릭 

 

2-4. 부여받은 인증키 확인

 

 

 

3. 개발을 위한 Open API 활용가이드 읽기

OpenAPI활용가이드_한국천문연구원_천문우주정보__특일_정보제공_서비스_v1.4.docx
0.24MB

 

 

 

4. 테스트

## 환경설정
import requests
import urllib.parse as urlparse
import pandas as pd
from datetime import date, timedelta 

## 요청 url & operation & ServiceKey
url = 'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService'
operation = 'getHoliDeInfo'  # 국경일 + 공휴일
ServiceKey = 'Your Key'

## parameter
solYear = '2018'  # 연도
solMonth = '09'  # 월
# _type = xml or json (default = xml)
# numOfRows = 한페이지 결과 수 (default = 10)
params = {'solYear':solYear, 'solMonth':solMonth}
request_query = get_request_query(url, operation, params, ServiceKey)
print('request_query :', request_query)
response = requests.get(url=request_query)
print('status_code:' + str(response.status_code))
if True == response.ok:
    print(response.text)

 

 

 

5. 응용

import requests
from urllib import parse
import pandas as pd
from bs4 import BeautifulSoup
from datetime import datetime, timedelta, date

from urllib.request import Request, urlopen

# 조회기간
start_year = 2010
end_year = int(date.today().strftime('%Y')) + 1
year_list = [year for year in range(start_year, end_year, 1)]

def getHoliday(year) : 
    url = 'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo'
    key_encoding = 'Your Key'
    key_decoding = parse.unquote(key_encoding)
    
    params = {
        'ServiceKey': key_decoding,
        'pageNo' : '1',
        'numOfRows': '100',
        'solYear': year,
    }
    
    response = requests.get(url, params=params)
    xml = BeautifulSoup(response.text, 'lxml')
    items = xml.find('items')
    item_list = []
    for item in items : 
        item_dict = {
            'Date': item.find('locdate').text.strip(),
#             '이름': item.find('datename').text.strip(),
            'isholiday': item.find('isholiday').text.strip(),
        }
        item_list.append(item_dict)
        
    return item_list

holiday_list = []
for year in year_list :
    holiday = getHoliday(year)
    holiday_list.extend(holiday)

holiday_df = pd.DataFrame(holiday_list)
holiday_df