아이의 영화 앱 서비스를 위해서는 영화 데이터가 필수적이다.

영화 데이터는 공공데이터포털에서 활용 신청을 하면 사용 가능하다.

 

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

영화와 관련된 많은 데이터 중에서

1. 최신 영화에 관한 정보가 계속 업데이트되어야 함

2. 관람 등급 등 영상물 등급에 관한 정보가 상세히 제공되어야 함

3. 제공하는 데이터 유형이 오픈 API일 것 (파일데이터 or 오픈 API 2가지가 있음)

 

1, 2번 이유는 말할 것도 없는데 3번은 이유가 뭐냐면

파일데이터면 데이터가 추가 될 때마다 수작업으로 데이터를 갈아 끼워야 하는데 오픈 API이면 데이터가 추가된 만큼 API를 호출해서 db를 업데이트하면 되니 더 편해서다.

 

위의 3가지를 만족하는 데이터는 

영상물등급위원회에서 제공하는 '영상물등급위원회_영화 등급분류 목록'이다.

https://www.data.go.kr/data/3043382/openapi.do

 

 

공공데이터를 사용하기 위해서는 활용신청을 해야한다.

 

우선 회원가입&로그인을 한다.

원하는 데이터를 클릭하고 우측 상단에 있는 '활용신청' 박스를 누르면 신청 페이지가 열린다.

위의 항목들을 간단하게 입력하고 활용신청을 하자.

보통 빠르면 당일, 좀 느리면 1~2일 정도 걸린다고 한다. 

(나는 하루정도 걸렸음)

마이페이지 > 데이터활용 > Open API  > 활용신청 현황으로 들어가면 승인이 완료되었는지 확인이 가능하다.

 

API 활용 신청이 끝났다면 이번에는 사용법에 대해 알아보자.

사용할 데이터의 페이지에 들어가서 상세기능을 클릭하면 요청변수, 출력결과, 샘플코드를 볼 수 있다.

 

샘플코드 (python)

샘플 코드를 실행하면 아래와 같은 결과가 나온다 (XML)

b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><response><header><resultCode>00</resultCode><resultMsg>NORMAL SERVICE.</resultMsg></header><body><items><item><aplcName>(\xec\xa3\xbc)\xec\x99\xb8\xec\x9c\xa0\xeb\x82\xb4\xea\xb0\x95</aplcName><coreHarmRsn>\xed\x8f\xad\xeb\xa0\xa5\xec\x84\xb1</coreHarmRsn><direName>\xeb\xa5\x98\xec\x8a\xb9\xec\x99\x84</direName><gradeName>15\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</gradeName><leadaName>\xea\xb9\x80\xec\x9c\xa4\xec\x84\x9d, \xec\xa1\xb0\xec\x9d\xb8\xec\x84\xb1</leadaName><mvAssoName>\xea\xb7\xb9\xec\x98\x81\xed\x99\x94</mvAssoName><oriTitle>\xeb\xaa\xa8\xea\xb0\x80\xeb\x94\x94\xec\x8a\x88</oriTitle><prodYear>2021</prodYear><prodcName>(\xec\xa3\xbc)\xec\x99\xb8\xec\x9c\xa0\xeb\x82\xb4\xea\xb0\x95</prodcName><prodcNatnlName>\xed\x95\x9c\xea\xb5\xad</prodcNatnlName><rtCoreHarmRsnNm>\xed\x8f\xad\xeb\xa0\xa5\xec\x84\xb1,\xeb\x8c\x80\xec\x82\xac,\xea\xb3\xb5\xed\x8f\xac</rtCoreHarmRsnNm><rtDate>20210407</rtDate><rtNo>2021-MF00914</rtNo><rtStdName1>15\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName1><rtStdName2>\xec\xa0\x84\xec\xb2\xb4\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName2><rtStdName3>15\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName3><rtStdName4>15\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName4><rtStdName5>15\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName5><rtStdName6>12\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName6><rtStdName7>12\xec\x84\xb8\xec\x9d\xb4\xec\x83\x81\xea\xb4\x80\xeb\x9e\x8c\xea\xb0\x80</rtStdName7><screTime>121\xeb\xb6\x84 2\xec\xb4\x88</screTime><stadCont>DCP</stadCont><useTitle>\xeb\xaa\xa8\xea\xb0\x80\xeb\x94\x94\xec\x8a\x88</useTitle><workCont>1990\xeb\x85\x84 \xed\x95\x9c\xea\xb5\xad\xec\x9d\x98 \xec\x99\xb8\xea\xb5\x90\xea\xb4\x80\xeb\x93\xa4\xec\x9d\xb4 \xeb\xb6\x81\xed\x95\x9c\xec\x82\xac\xeb\x9e\x8c\xeb\x93\xa4\xea\xb3\xbc \xed\x95\xa8\xea\xbb\x98 \xec\x86\x8c\xeb\xa7\x90\xeb\xa6\xac\xec\x95\x84 \xeb\x82\xb4\xec\xa0\x84\xec\x9d\x98 \xea\xb2\xa9\xeb\x8f\x99\xec\x9c\xbc\xeb\xa1\x9c\xeb\xb6\x80\xed\x84\xb0 \xed\x83\x88\xec\xb6\x9c\xed\x95\x98\xeb\x8a\x94 \xeb\x82\xb4\xec\x9a\xa9\xec\x9d\x98 \xec\x98\x81\xed\x99\x94</workCont></item></items><numOfRows>2</numOfRows><pageNo>1</pageNo><totalCount>1</totalCount></body></response>'

 

 

활용신청 상세기능정보의 미리 보기 기능을 사용해서 값 확인도 가능하다.

미리보기 기능으로 열린 웹페이지

내가 필요한 데이터는 <item> 태그 값들이다. (aplcName 태그값, coreHarmRsn 태그값 등등등)

 

아래의 함수는 params(요청 변수)에 해당하는 영화 데이터들을 가져오고, 각각의 영화 데이터들을 dict 타입으로 만들어서

[dict]을 반환하는 함수이다.

 

params의 값들을 변경해서 원하는 조건의 값들을 호출할 수 있다.

(아래 함수는 등급분류 시작, 종료일을 기준으로 영화 데이터를 호출한다)

import requests

import xml.etree.ElementTree as ET

params = {
        'serviceKey': api_key,
        'pageNo': '1',
        'numOfRows': '9999',
        'stDate': 'start_date',
        'edDate': 'end_date',
    }
    
def get_items(api_url, params) -> [dict]:
    response = requests.get(api_url, params=params)
    root = ET.fromstring(response.content)
    # ET.Element
    items = root.findall('./body/items/item')

    dicts = []

    # ET.Element => dict
    for item in items:
        dic = {}
        for child in item:
            dic[child.tag] = child.text
        dicts.append(dic)

    return dicts

 

이렇게 해서 영화의 데이터와 데이터 호출 하는 법에 대해 알아봤다.

 

데이터를 보면 영화제목부터 시작해서 관람 등급, 등급분류기준별 등급, 줄거리 등 영화에 관한 거의 모든 정보를 담고 있다. 

다 좋은데 나는 '이 영화가 이러이러한 장면과 묘사 때문에 15세 등급이다.' 이런 정보가 있었으면 좋겠다.

공공데이터 포털의 영화데이터들을 다 찾아봤는데 내가 원하는 정보를 제공하는 데이터는 없었다.

포기해야 하나 싶었는데...

영상물등급위원회의 온라인등급분류서비스(Ors)의 등급자료조회 서비스에서 위의 정보를 얻을 수 있었다!

 

다음 글에서 등급자료조회 서비스에서 정보를 가져오는 법에 대해서 알아보겠다.