[API] 구글 스프레드시트 영화진흥회 DB 가져오기

2023. 12. 8. 16:50자격증(다다익선)/웹개발(HTML,Javascript)

728x90

[API] 구글 스프레드시트 영화진흥회 DB 가져오기


어? 네이버 영화 안되구나?

 

네이버는 개발자들에게 다양한 정보를 제공한다. 그중에서 많이 사용했던 게 영화 search였다.

출처 : 네이버

그런데... 간만에 들어가서 사용하려니까??? 자꾸 오류코드만 난무한다.

내가 코드를 잘못 적었다냐... 해서 공지사항을 보니...

출처 : 네이버

아하... 네이버 영화 종료하면서 이것도 같이 사라져 버렸다.

출처 : https://tenor.com/

.


그러면 대안을 찾아야지~ 영화진흥회 API

 

다행히도 영화 API를 제공해 주는 고마운 존재들이 몇 군데 있다. 대표적으로 영화진흥회 API를 들 수 있겠다.

무료로 제공을 하고 있기에 회원가입 후 사용하면 된다.

https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do

 

영화진흥위원회 오픈API

OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.

www.kobis.or.kr

728x90

 

회원가입 후 보안키 받으면 다른 API 사용법과 크게 다를 게 없다.

뭐 어떤 프로그램으로 구동을 해도 상관없겠지만, 받아오는 DB가 무겁지 않기 때문에 이번엔 구글 스프레드시트로 그 내용을 불러와 봤다.


구글 스프레드시트로 오픈 API 불러오기

 

일단 이 모든 걸 시작한 이유는 '넷플릭스 오리지널 한국 영화'를 빠르게 검색하고 싶어서였다.

물론 전지전능 네이버에 아래와 같이 검색하면 포스터까지 해서 잘 나온다.

출처 : 네이버

그런데 이걸 언제 다 엑셀화 시키겠는가?

(다 만들고 드는 생각이... 어? 그냥 네이버 검색 페이지를 크롤링해도....)

 

아무튼 친절한 영화진흥회 무료 API를 통해 긁어와 보자.

 

일단 수많은 영화사 중에서 '넷플릭스'를 검색하는 코드를 짜야한다.

아주 간단하다. 그래서 이렇게 만들면 된다.

https://kobis.or.kr/kobisopenapi/webservice/rest/company/searchCompanyList.json?key=내가받은키&companyNm=넷플릭스

내가 받은 키와 검색어에 '넷플릭스'를 넣어 주소창에 넣어주니 아래와 같이 출력이 된다.

성공적으로 출력이 되는 듯 하니 빠르게 스프레드시트에 코딩을 해주자.

function fetchDataFromAPI() {
  var apiKey = '내가받은API키'; 
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('시트1');

  // 시트1의 B1셀에서 회사명을 가져옴
  var companyNm = sheet.getRange('B1').getValue();

  // API 호출을 위한 URL
  var apiUrl = 'http://kobis.or.kr/kobisopenapi/webservice/rest/company/searchCompanyList.json?key=' + apiKey + '&companyNm=' + encodeURIComponent(companyNm);

  // API 호출
  var response = UrlFetchApp.fetch(apiUrl);
  var responseData = response.getContentText();
  var jsonData = JSON.parse(responseData);

  var rangeToClear = sheet.getRange('B3:D5');
  rangeToClear.clearContent();

  var companyList = jsonData.companyListResult.companyList;
  for (var i = 0; i < companyList.length; i++) {
    var company = companyList[i];
    sheet.getRange(i + 3, 2).setValue(company.companyCd);
    sheet.getRange(i + 4, 2).setValue(company.companyNm);
    sheet.getRange(i + 5, 2).setValue(company.companyNmEn);
  }
  
  }

URL에 들어가는 검색어는 당연하게 인코딩이 되어야 한다. 적어놓은 코드에서 참고하길 바란다. 인코딩인 안된체 한글로 입력이 될 경우 오류가 날 수 있다.

 

위와 같이 b1 셀에서 넷플릭스를 검색어 집어넣어 영화사코드 / 영화사명 / 영화사명(영문)을 불러올 수 있게 되었다. 여기서 중요한 게 영화진흥회에서 사용하는 영화사코드이다. 해당 코드가 있어야지만 해당 영화사 필모를 받아 볼 수 있기 때문이다.

 

잘 작동하는지 확인 차 다른 영화사도 검색을 해봤다.

아주 잘 작동한다.

 

그러면 이제 영화사 코드를 가지고 필모를 받아보자.


영화진흥회 영화사코드로 필모DB 가져오기

 

이 또한 위와 동일하다. 일단 주소창 링크를 넣어보자.

잘 나오는 걸 확인했으니 내가 필요한 정보만 DB화 시키면 되겠다.

나 같은 경우는 필모DB만 있으면 된다. 그 코드는 아래와 같다.

  var companyCd1 = sheet.getRange('B3:D3').getValue();

  var apiUrl1 = 'https://kobis.or.kr/kobisopenapi/webservice/rest/company/searchCompanyInfo.json?key=' + apiKey + '&companyCd=' + encodeURIComponent(companyCd1);

  var response1 = UrlFetchApp.fetch(apiUrl1);
  var responseData1 = response1.getContentText();
  var jsonData1 = JSON.parse(responseData1);

  var rangeToClear = sheet.getRange('A9:D1000');
  rangeToClear.clearContent();

  var companyInfoResult = jsonData1.companyInfoResult.companyInfo.filmos;
  for (var i = 0; i < companyInfoResult.length; i++) {
    var company1 = companyInfoResult[i];
    sheet.getRange(i + 9, 1).setValue(company1.movieCd);
    sheet.getRange(i + 9, 2).setValue(company1.movieNm);
    sheet.getRange(i + 9, 4).setValue(company1.companyPartNm);

  }

간단히 해석을 하면 B3:D3셀에서 값을 가져와 url에 인코딩해 json을 불러오고 출력된 값 중에서 'filmos'의 모든 값을 시트에 입력한다는 코드다.

 

결과는 아래와 같다.

이제 각 영화별로 필요한 정보를 가져와 통계화만 하면 내가 원하는 정보를 얻을 수 있다.

고것까지는 나중에 할까 한다.ㅋㅋ 그나저나 네이버 크롤링이 상당히 어려워졌네...-_-;;


스프레드시트 구동 영상

728x90