- 공연예술통합전산망(KOPIS) OPEN API를 이용해 공연정보 데이터를 수집하고 정제해 데이터베이스에 정제하는 서비스입니다.
-
-
Performance Table - 공연 상세 정보
-
Facility Table - 공연 시설 상세 정보
-
Prf_session - 공연 일자 정보
-
Prf_rank - Top10 - 공연 정보
-
-
- KOPIS의 데이터는 BeautifulSoup 라이브러리를 이용해 XML parsing 진행
- 공연, 시설 목록
-
매일 정해진 시간에 따라 공연 ID, 시설 목록 ID를 KOPIS에 요청
-
기존의 데이터베이스의 공연 ID, 시설 목록 ID를 중복 검사 후 새로 등록된 데이터를 추가
-
- 공연 시설 상세
-
공연 시설들의 상세 정보를 정제 및 적재
-
요청한 시설 ID 리스트를 이용해 KOPIS에 시설 상세 데이터 요청
-
빈 문자열이 들어오는 컬럼들은 유효성 검사를 통해 None으로 변환 후 반환
-
- 공연 상세
-
상세 공연 정보들 정제 및 적재
-
공연 일정과 공연 가격이 유효한 데이터가 아닐 경우 사용가능한 데이터가 아니라고 판단하고 로직을 수행하지 않도록 처리
-
이외 빈 문자열이 들어오는 컬럼들은 유효성 검사를 통해 None으로 변환 후 반환
-
응답된 데이터중 공연 상세 시간 데이터는 별도로 데이터 정제 후 관리
-
- 공연 상세 시간
-
기존 데이터는 다음과 같은형태로 응답됨
토요일 ~ 일요일(13:00,15:00), 월요일(16:00,19:00), 금요일(15:00,18:00), HOL(11:00,14:00,16:00)
-
데이터를 HOL(공휴일)이 포함된 데이터와 아닌 데이터로 분리해서 처리
-
공휴일 미포함
-
,
를 기준으로 split하여 배열 생성['토요일 ~ 일요일(13:00,15:00)', '월요일(16:00,19:00)', '금요일(15:00,18:00)']
-
1번의 각 원소를 요일과 시간으로 분리
['토요일 ~ 일요일', '13:00', '15:00']
-
첫번째 원소에
~
가 포함되어 있거나 없는 경우로 분리-
~
가 포함되어 있지 않는 원소중에는 HOL도 있기 때문에 이는 제외i. 시작일자와 종료일자 사이의 해당 요일의 모든 년/월/일을 리스트로 생성
ii. 생성된 모든 일자에 배열에 포함된 시간 추가
`2023-01-01, 13:00` `2023-01-08, 13:00` `2023-01-02, 15:00` `2023-01-09, 15:00`
-
~
가 포함되어 있는 경우i. 초기에 일주일의 요일을 담고있는 배열 선언
`['월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일']`
ii. 첫번째 원소를
~
기준으로 분리함`['토요일', 일요일']`
iii. 시작 인덱스를 첫번째 인덱스로 잡음
iv. 첫번째 원소부터 일주일을 탐색하며 마지막 원소를 만날때까지 각 요일에 대한 데이터를 생성
-
-
-
공휴일 포함
-
HOL 문자열이 들어있는 원소를 따로 분리 후 flag 변경
-
위와 마찬가지로 HOL과 시간으로 분리
`['HOL', '13:00', '15:00']`
-
내년까지의 공휴일 리스트 중 공연 시작 날짜와 종료날짜 사이의 공휴일을 추출
-
추출된 공휴일에 배열에 포함된 시간 추가
`2023-03-01, 13:00` `2023-03-01, 17:00`
-
-
데이터 최종 형태
-
- Top 10 공연 정보
-
1위부터 10위까지의 공연 순위를 저장함
-
당일 순위 데이터가 업데이트되는 시간과 API 호출 시간의 간극으로 인한 데이터의 부재를 방지하고자 2일까지의 순위 데이터를 저장함
-
불필요한 데이터의 저장을 막기 위해 3일 이후부터의 데이터는 삭제
-
-
MariaDB:10.3
-
Python 3.8.6
-
공연 시간 데이터를 각 요일,시간 세션으로 분리
-
공휴일 데이터가 있을 시 별도의 처리
-
시간복잡도 및 보일러플레이트 코드의 개선이 좀 더 필요함
-
공휴일 데이터의 불규칙적인 업데이트를 고려해 데이터베이스에 저장하지 않고 사용하고 있는데 이를 보완할 방법 고안