아이의 영화 앱 서비스를 위해서는 영화 데이터가 필수적이다.
영화 데이터는 공공데이터포털에서 활용 신청을 하면 사용 가능하다.
영화와 관련된 많은 데이터 중에서
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 활용 신청이 끝났다면 이번에는 사용법에 대해 알아보자.
사용할 데이터의 페이지에 들어가서 상세기능을 클릭하면 요청변수, 출력결과, 샘플코드를 볼 수 있다.
샘플 코드를 실행하면 아래와 같은 결과가 나온다 (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)의 등급자료조회 서비스에서 위의 정보를 얻을 수 있었다!
다음 글에서 등급자료조회 서비스에서 정보를 가져오는 법에 대해서 알아보겠다.
'프로젝트 > 아이의 영화' 카테고리의 다른 글
아이의 영화 앱 만들기#4-데이터 저장(Firestore) (0) | 2023.10.18 |
---|---|
아이의 영화 앱 만들기#3-영화 데이터(2) (0) | 2023.10.17 |
아이의 영화 개인정보처리방침 (0) | 2023.10.14 |
아이의 영화 앱 만들기#2-앱 기능 및 구조 (0) | 2023.09.18 |
아이의 영화 앱 만들기#1-시작&공모전 참가 (0) | 2023.07.25 |