My Image

Django 포스팅

[Django] 영화진흥위원회 오픈 API 파이썬으로 웹 크롤링하기

Doyeon0430 | 2023년 07월 24일

Django 이미지

이번시간에는 영화진흥위원회에서 제공하는 오픈 API를 사용 할 겁니다.

영화진흥위원회는 문화체육관광부 산하 소속으로 대한민국 영화 산업의 진흥을 위해 힘써주는 공공기관입니다.

또한 일별 박스오피스, 영화 정보, 영화인 검색 등 다양한 영화 데이터들을 제공하고 있습니다.

이러한 데이터들을 장고를 통해 가져올 것이며 웹사이트에 게시하는 과정까지 알려드리겠습니다.

주소 : 영진위 오픈 API

 

  1. 영진위 오픈 API 회원가입

  2. views.py로 XML 파일 가져오기

  3. 템플릿으로 화면에 배치하기

 

 

1. 영진위 오픈 API 회원가입

영화진흥위원회 오픈 API를 검색하시고 회원가입을 해주세요.

로그인 후 KEY를 받아야 XML 파일을 열 수 있습니다.

 

1. 영화진흥위원회 로그인

영진위 홈페이지 1

회원가입은 빠르게 진행할 수 있으며 키도 바로 발급해줍니다.

참고로 이용약관을 보면 key 값을 공개하지말라는 규정이 있으니

작업하실 때 주의하시기 바랍니다.

 

2. 영화진흥위원회 API

영진위 홈페이지 2

서비스 안내문에 나온 REST 방식으로 데이터를 가져 올 겁니다. 

기본 요청 URL은 아래처럼 구성되어 있습니다.

 

3. 영화진흥위원회 XML

http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.xml?
key={키 입력 부분}&targetDt={날짜 입력 부분}

Key는 로그인 하실 때 받으신 해당 값입니다.

날짜는 yyyymmdd 형식으로 20230724처럼 입력하시면 됩니다.

해당 부분을 채워넣고 url로 접속하면 XML 파일이 보입니다.

아래는 영화진흥위원회에서 제공하는 샘플 예시입니다.

주소 : 영진위 XML 응답 예시

 

 

2. views.py로 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는 누적관객수입니다.

 

 

3. 템플릿으로 화면에 배치하기

서버에서 받아온 데이터를 템플릿에 배치하여 화면에 표시해봤습니다.

테이블 형식으로 데이터를 정렬하고 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 버전 결과화면

영진위 오픈 API 결과화면 1

 

3. 모바일 버전 결과화면

영진위 오픈 API 결과화면 2

댓글 (0)

    댓글이 없습니다.

간편 댓글 작성

My Image My Image My Image My Image