끄적거림

[API] 영화진흥위원회 제공 박스오피스 API 사용 본문

Python

[API] 영화진흥위원회 제공 박스오피스 API 사용

Signing 2020. 2. 28. 06:06
728x90
반응형

 

 

 

 

1. 계정 생성

http://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do?serviceId=searchDailyBoxOffice

 

영화진흥위원회 오픈API

 

www.kobis.or.kr

위의 주소에 들어가서 영화진흥위원회 페이지에서 회원가입을 먼저 진행해야한다.

 

 

 

2. 이후 상단의 "키 발급/관리" 탭을 클릭하여 키를 발급받는다.

 

 

 

 

3. Coding

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
from pandas.io.json import json_normalize
import json
import pandas as pd




#  Area Data(Meta Data)

#  01. URL parsing
url_for_areaCode = 'http://www.kobis.or.kr/kobisopenapi/webservice/rest/code/searchCodeList.json'
params_for_areaCode = '?' + urlencode({
    quote_plus("key"): "~~~~~",  # 발급키
    quote_plus("comCode"): "0105000000" # 조회하고자하는 상위 코드
})
req_for_areaCode = urllib.request.Request(url_for_areaCode + unquote(params_for_areaCode))

#  02. get Data
for_areaCode = urlopen(req_for_areaCode).read() # get bytes data

#  03. Convert Readable Data
data_for_areaCode = json.loads(for_areaCode)
area_code = pd.DataFrame(data_for_areaCode['codes'])
#  지역코드 : area code
#      fullCd korNm engNm
# 0   0105001   서울시
# 1   0105002   경기도
# 2   0105003   강원도
# 3   0105004  충청북도
# 4   0105005  충청남도
# 5   0105006  경상북도
# 6   0105007  경상남도
# 7   0105008  전라북도
# 8   0105009  전라남도
# 9   0105010   제주도
# 10  0105011   부산시
# 11  0105012   대구시
# 12  0105013   대전시
# 13  0105014   울산시
# 14  0105015   인천시
# 15  0105016   광주시
# 16  0105017   세종시






#  Movie Data

url = 'http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json'

#  loop per area
res = pd.DataFrame()
for i, areaCode in enumerate(area_code['fullCd']):
    for yn in ['Y', 'N']:
        for kf in ['K', 'F']:
            #  01. URL parsing
            params = '?' + urlencode({
                quote_plus("key"): "~~~~",  # 발급키
                quote_plus("targetDt"): "20200224",  # 원하는 일자
                quote_plus("itemPerPage"): "20",  # 결과 row 수 // 최대 10개
                quote_plus("multiMovieYn"): str(yn),  # Y(다양성 영화), N(상업영화)
                quote_plus("repNationCd"): str(kf),  # K(한국 영화), F(외국 영화)
                quote_plus("wideAreaCd"): str(areaCode)  # 지역코드
            })
            req = urllib.request.Request(url + unquote(params))

            #  02. get Data
            response_body = urlopen(req).read()  # get bytes data

            #  03. Convert Readable Data
            data = json.loads(response_body)
            data_df = pd.DataFrame(data['boxOfficeResult']['dailyBoxOfficeList'])
            data_df['multiMovieYn'] = yn
            data_df['repNationCd'] = kf
            data_df['fullCD'] = areaCode
            data_df['korNm'] = area_code['korNm'][i]

            #  04. merge data per area
            res = res.append(data_df)

            print("complete multiMovieYn : ", yn, "\t repNationCd : ", kf, "\t wideAreaCd : ", areaCode)




pd.DataFrame(res).to_csv('C:/Users/DAL/Desktop/KW/movie.csv')

 

 

 

 

 

 

 

 

728x90
반응형
Comments