Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 해외주식
- 주식
- ConnectedHomeIP
- Espressif
- 라즈베리파이
- 매터
- 배당
- 홈네트워크
- homebridge
- 월패드
- esp32
- raspberry pi
- 힐스테이트 광교산
- 애플
- Bestin
- 국내주식
- Home Assistant
- Python
- 미국주식
- cluster
- 현대통신
- Apple
- RS-485
- SK텔레콤
- matter
- 파이썬
- 나스닥
- MQTT
- 공모주
- 빅데이터분석기사
Archives
- Today
- Total
YOGYUI
2023년 공휴일을 알아보자 (공공데이터포털 OpenAPI) 본문
반응형
2023년 공휴일 크롤링 (OpenAPI)
2022년이 저물어간다
매년 새해가 밝아오면 가장 먼저 하는 일은 역시 공휴일 확인 (직장인의 유일한 낙이랄까)
공공데이터포털의 "한국천문연구원_특일 정보" Open API를 사용해서 다가오는 2023년의 공휴일 정보를 가져와보자 (원래 노는 토/일 주말은 제외~)
파이썬 코드로 매년 초 한번씩 정보를 가져와서 DB에 저장하는 자동화 코드를 개발해두면 여기저기 요긴하게 사용할 수 있다 (주식 매매, 업무 이력 관리 등등)
[Python code]
import datetime
import requests
import pandas as pd
from bs4 import BeautifulSoup, element
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def getHolidayDataFrame(year: int) -> pd.DataFrame:
url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo"
api_key_encoded = "Your key from data.go.kr"
api_key_decoded = requests.utils.unquote(api_key_encoded, encoding="utf-8")
params = {
"ServiceKey": api_key_decoded,
"solYear": year,
"numOfRows": 100
}
weekday_name = ["월", "화", "수", "목", "금", "토", "일"]
response = requests.get(url, params=params)
xml = BeautifulSoup(response.text, "lxml")
def parseItem(item: element.Tag) -> dict:
dt = datetime.datetime.strptime(item.find("locdate").text.strip(), '%Y%m%d')
item_dict = {
"이름": item.find("datename").text.strip(),
"날짜": dt,
"요일": weekday_name[dt.weekday()]
}
return item_dict
item_list = [parseItem(x) for x in xml.find("items")]
return pd.DataFrame(item_list)
if __name__ == "__main__":
df_holiday_2023 = getHolidayDataFrame(2023)
app = QApplication([])
app.setStyle('fusion')
table = QTableWidget()
table.setColumnCount(len(df_holiday_2023.columns))
table.setHorizontalHeaderLabels(df_holiday_2023.columns)
table.setRowCount(len(df_holiday_2023))
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
for row in range(table.rowCount()):
record = df_holiday_2023.iloc[row]
item = QTableWidgetItem(record['이름'])
table.setItem(row, 0, item)
item = QTableWidgetItem(record['날짜'].strftime('%Y-%m-%d'))
item.setTextAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
table.setItem(row, 1, item)
weekday = record['요일']
item = QTableWidgetItem(weekday)
item.setTextAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
if weekday in ['토', '일']:
item.setForeground(QBrush(Qt.red))
table.setItem(row, 2, item)
table.show()
app.exec()
[실행 결과]
In [1]: df_holiday_2023
Out[1]:
이름 날짜 요일
0 1월1일 2023-01-01 일
1 설날 2023-01-21 토
2 설날 2023-01-22 일
3 설날 2023-01-23 월
4 대체공휴일 2023-01-24 화
5 삼일절 2023-03-01 수
6 어린이날 2023-05-05 금
7 부처님오신날 2023-05-27 토
8 현충일 2023-06-06 화
9 광복절 2023-08-15 화
10 추석 2023-09-28 목
11 추석 2023-09-29 금
12 추석 2023-09-30 토
13 개천절 2023-10-03 화
14 한글날 2023-10-09 월
15 기독탄신일 2023-12-25 월
대체공휴일은 1월 22일 일요일 구정 대상으로 하루만 발생
총 16일의 공휴일이 예정되어 있다
이 중 주말(토, 일)을 제외하면
df_holiday_2023_weekday = df_holiday_2023[~df_holiday_2023['요일'].str.contains('토') & ~df_holiday_2023['요일'].str.contains('일')]
In [2]: len(df_holiday_2023_weekday)
Out[2]: 11
주중 공휴일은 총 11일 예정
1월 1일 신정은 국경일이 아니므로 대체공휴일이 적용되지 않는다
또한 대체공휴일은 석/추석 연휴, 어린이날, 3.1절, 광복절, 개천절, 한글날만을 대상으로 했는데, 2023년부터는 석가탄신일과 성탄절도 도입될 가능성이 있다 (2023년 경제정책방향 - 지역경제 활성화와 여가관 보장을 위한 대체공휴일 지정 확대 추진 계획)
https://www.joongang.co.kr/article/25127117#home
끝~!
반응형
'Software > Python' 카테고리의 다른 글
Python - 대한민국 공휴일 조회 어플리케이션 (PySide6) (3) | 2024.09.18 |
---|---|
2024년 공휴일을 알아보자 (공공데이터포털 OpenAPI) (0) | 2024.01.02 |
Python - 대출 이자 계산기 앱 개발 (1) | 2022.04.21 |
PyQt5 - QSpinBox 0x7FFFFFFFF 이상 최대값으로 설정하기 (0) | 2022.02.08 |
Python::typing::Literal - 변수값 범위 명시 (2) | 2022.01.24 |