Django 포스팅
Doyeon0430 | 2023년 07월 24일
이번시간에는 영화진흥위원회에서 제공하는 오픈 API를 사용 할 겁니다.
영화진흥위원회는 문화체육관광부 산하 소속으로 대한민국 영화 산업의 진흥을 위해 힘써주는 공공기관입니다.
또한 일별 박스오피스, 영화 정보, 영화인 검색 등 다양한 영화 데이터들을 제공하고 있습니다.
이러한 데이터들을 장고를 통해 가져올 것이며 웹사이트에 게시하는 과정까지 알려드리겠습니다.
주소 : 영진위 오픈 API
영화진흥위원회 오픈 API를 검색하시고 회원가입을 해주세요.
로그인 후 KEY를 받아야 XML 파일을 열 수 있습니다.
1. 영화진흥위원회 로그인
회원가입은 빠르게 진행할 수 있으며 키도 바로 발급해줍니다.
참고로 이용약관을 보면 key 값을 공개하지말라는 규정이 있으니
작업하실 때 주의하시기 바랍니다.
2. 영화진흥위원회 API
서비스 안내문에 나온 REST 방식으로 데이터를 가져 올 겁니다.
기본 요청 URL은 아래처럼 구성되어 있습니다.
3. 영화진흥위원회 XML
http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.xml?
key={키 입력 부분}&targetDt={날짜 입력 부분}
Key는 로그인 하실 때 받으신 해당 값입니다.
날짜는 yyyymmdd 형식으로 20230724처럼 입력하시면 됩니다.
해당 부분을 채워넣고 url로 접속하면 XML 파일이 보입니다.
아래는 영화진흥위원회에서 제공하는 샘플 예시입니다.
주소 : 영진위 XML 응답 예시
장고는 파이썬 기반이므로 웹 크롤링 라이브러리인 BeautifulSoup를 사용합니다.
1. views.py
# 어제 날짜 생성
today = datetime.today()
yesterday = today - timedelta(days=1)
target_date = yesterday.strftime("%Y%m%d")
yesterday_str = yesterday.strftime("%Y-%m-%d")
# API URL 생성
key = env('API_KEY')
url = f"https://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.xml?key={key}&targetDt={target_date}"
# XML 데이터를 가져옴
response = requests.get(url)
xml_data = response.content
soup = BeautifulSoup(xml_data, 'xml')
# 영화 정보 추출
movies = soup.find_all('dailyBoxOffice')
movie_list = []
for movie in movies:
rank = movie.find('rank').text
movieNm = movie.find('movieNm').text
openDt = movie.find('openDt').text
audiAcc = movie.find('audiAcc').text
movie_list.append({'rank': rank, 'movieNm': movieNm, 'openDt': openDt, 'audiAcc': audiAcc})
일별 박스오피스는 실시간으로 변하기 때문에 어제 날짜를 기준으로 가져왔습니다.
API키는 보안상 env로 숨긴 채 url에 넣었습니다.
데이터들은 BeautifulSoup으로 XML 파싱하여 변환시키고 movie_list에 담아주면됩니다.
rank는 순위 / movieNm은 영화명 / openDt는 개봉일 / audiAcc는 누적관객수입니다.
서버에서 받아온 데이터를 템플릿에 배치하여 화면에 표시해봤습니다.
테이블 형식으로 데이터를 정렬하고 for문으로 값들을 반복시킵니다.
1. HTML 코드
<div>대한민국 일별 박스오피스</div>
<table>
<caption>[{{ yesterday_str }} 기준]</caption>
<thead>
<th colspan="2">영화 제목</th>
<th>개봉일</th>
<th>누적 관객수</th>
</thead>
{% for movie in movie_list %}
<tbody>
<td>{{ movie.rank }}</td>
<td>{{ movie.movieNm }}</td>
<td>{{ movie.openDt }}</td>
<td>{{ movie.audiAcc|intcomma }}명</td>
</tbody>
{% endfor %}
<caption>제공: 영화진흥위원회 API</caption>
</table>
각 항목들은 XML 파일에서 받아온 데이터인 movie_list의 속성입니다.
데이터는 실시간으로 변화하므로 언제든지 최신 정보를 반영하여 화면에 표시할 수 있습니다.
2. PC 버전 결과화면
3. 모바일 버전 결과화면
댓글 (0)
간편 댓글 작성