Python을 배워보자

영화진흥위원회(KOBIS) 오픈 API를 사용해 일별 박스오피스 데이터를 가져오는 Python 샘플 코드

_Blue_Sky_ 2025. 7. 22. 02:50
728x90

영화진흥위원회(KOBIS) 오픈 API를 사용해 일별 박스오피스 데이터를 가져오는 Python 샘플 코드를 작성해드리겠습니다. 제공된 링크(https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do)를 기반으로, 일별 박스오피스 데이터를 JSON 형식으로 요청하고 결과를 출력하는 예제를 작성합니다. 이 예제는 requests 라이브러리를 사용하며, 결과는 간단히 콘솔에 출력하거나 CSV 파일로 저장할 수 있습니다.

전제 조건

  1. API 키 발급: KOBIS 오픈 API를 사용하려면 회원가입 후 인증 키를 발급받아야 합니다. 회원가입은 https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do에서 진행하고, 키 발급/관리 메뉴에서 키를 발급받으세요.
  2. 필요 라이브러리: requestspandas 라이브러리가 필요합니다. 설치가 안 되어 있다면 다음 명령어로 설치하세요:
    pip install requests pandas

샘플 코드

아래는 일별 박스오피스 데이터를 가져와 콘솔에 출력하고 CSV 파일로 저장하는 Python 코드입니다. 이 예제는 특정 날짜(예: 2025년 7월 21일)의 박스오피스 데이터를 조회합니다.

import requests
import pandas as pd

# KOBIS API 설정
API_KEY = "f5eef3421c602c6cb7ea224104795888"  # 본인의 API 키로 교체하세요
BASE_URL = "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json"
TARGET_DT = "20250721"  # 조회할 날짜 (YYYYMMDD 형식, 예: 2025-07-21)
ITEM_PER_PAGE = "10"  # 한 페이지에 반환할 항목 수 (최대 10)

# API 요청 URL 생성
url = f"{BASE_URL}?key={API_KEY}&targetDt={TARGET_DT}&itemPerPage={ITEM_PER_PAGE}"

# API 요청
try:
    response = requests.get(url)
    response.raise_for_status()  # HTTP 에러가 있으면 예외 발생
    data = response.json()  # JSON 응답 파싱

    # 데이터 확인
    if "boxOfficeResult" in data and "dailyBoxOfficeList" in data["boxOfficeResult"]:
        daily_box_office = data["boxOfficeResult"]["dailyBoxOfficeList"]

        # 출력할 데이터 리스트 생성
        movie_list = []
        for movie in daily_box_office:
            movie_info = {
                "Rank": movie["rank"],
                "Movie Name": movie["movieNm"],
                "Audience Count": movie["audiCnt"],
                "Sales Amount": movie["salesAmt"],
                "Open Date": movie["openDt"]
            }
            movie_list.append(movie_info)

        # 콘솔에 출력
        print(f"Daily Box Office for {TARGET_DT}:")
        for movie in movie_list:
            print(f"Rank: {movie['Rank']}, Movie: {movie['Movie Name']}, "
                  f"Audience: {movie['Audience Count']}, Sales: {movie['Sales Amount']}, "
                  f"Open Date: {movie['Open Date']}")

        # CSV로 저장
        df = pd.DataFrame(movie_list)
        df.to_csv("daily_box_office.csv", index=False, encoding="utf-8")
        print("Data saved to 'daily_box_office.csv'")

    else:
        print("No box office data found for the specified date.")

except requests.exceptions.HTTPError as http_err:
    print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as err:
    print(f"Error occurred: {err}")
except ValueError as json_err:
    print(f"JSON decoding error: {json_err}")

코드 설명

  1. API 설정:
    • API_KEY: KOBIS에서 발급받은 인증 키를 입력하세요. 위 코드의 키는 예시입니다.
    • BASE_URL: 일별 박스오피스 API의 기본 URL입니다.
    • TARGET_DT: 조회하려는 날짜를 YYYYMMDD 형식으로 지정합니다.
    • ITEM_PER_PAGE: 한 페이지에 반환할 영화 수(최대 10)를 설정합니다.
  2. API 요청:
    • requests.get()을 사용해 API를 호출합니다.
    • 요청 URL은 key, targetDt, itemPerPage 파라미터를 포함합니다.
    • response.raise_for_status()로 HTTP 에러를 체크합니다.
  3. 데이터 처리:
    • 응답은 JSON 형식으로 받아 파싱합니다.
    • boxOfficeResult 내의 dailyBoxOfficeList에서 영화 데이터를 추출합니다.
    • 각 영화의 순위(rank), 제목(movieNm), 관객 수(audiCnt), 매출액(salesAmt), 개봉일(openDt)를 추출해 리스트로 저장합니다.
  4. 출력 및 저장:
    • 콘솔에 영화 정보를 출력합니다.
    • pandas를 사용해 데이터를 CSV 파일(daily_box_office.csv)로 저장합니다.
  5. 에러 처리:
    • HTTP 에러, 네트워크 에러, JSON 파싱 에러 등을 처리해 안정성을 높였습니다.

실행 결과

  • 콘솔 출력 예시:
    20250721 일별 박스오피스 순위:
    순위: 1, 제목: F1 더 무비, 관객 수: 50924, 매출액: 544976290, 개봉일: 2025-06-25
    순위: 2, 제목: 명탐정 코난: 척안의 잔상, 관객 수: 29199, 매출액: 276738050, 개봉일: 2025-07-16
    순위: 3, 제목: 킹 오브 킹스, 관객 수: 27642, 매출액: 250207750, 개봉일: 2025-07-16
    순위: 4, 제목: 노이즈, 관객 수: 27200, 매출액: 261983750, 개봉일: 2025-06-25
    순위: 5, 제목: 쥬라기 월드: 새로운 시작, 관객 수: 19925, 매출액: 185814220, 개봉일: 2025-07-02
    순위: 6, 제목: 슈퍼맨, 관객 수: 14061, 매출액: 136166580, 개봉일: 2025-07-09
    순위: 7, 제목: 전지적 독자 시점, 관객 수: 3142, 매출액: 28566000, 개봉일: 2025-07-23
    순위: 8, 제목: 괴기열차, 관객 수: 2230, 매출액: 19812300, 개봉일: 2025-07-09
    순위: 9, 제목: 극장판 도라에몽: 진구의 그림이야기, 관객 수: 1833, 매출액: 15926600, 개봉일: 2025-07-16
    순위: 10, 제목: 메간 2.0, 관객 수: 1801, 매출액: 16873300, 개봉일: 2025-07-16
    데이터가 'daily_box_office.csv' 파일로 저장되었습니다.
  • daily_box_office.csv 파일이 생성되며, 영화 정보가 테이블 형태로 저장됩니다.

추가 참고

  • API 문서: KOB
728x90