앱스 스크립트 사용법 (5) xml 파싱

이번에는 구글 앱스 스크립트를 사용하여 xml 파일을 읽어들이고, 읽은 데이터를 스프레드시트에 표시하는 시트를 만들어보겠습니다.

참조하는 xml은 공공데이터 포털사이트 https://www.data.go.kr/ 의 서울특별시 관측소별 기상관측 정보(시간단위)에서 제공하는 오픈 API를 통해 접근했습니다.

오픈 API로 접근한 xml xml03.png

xml을 읽어들이는 코드는 Google Apps Script > REFERENCE > Class XmlService를 참고하였습니다.

function myFunction() {

var sheet = SpreadsheetApp.getActiveSheet();
var numRows = 2;

// 서울특별시 관측소별 기상관측 정보(시간단위)
var url = 'http://openAPI.seoul.go.kr:8088/(인증키)/xml/RealtimeWeatherStation/1/16/';
var xml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(xml);
var xml_rows = document.getRootElement().getChildren('row');

var time = xml_rows[0].getChild('SAWS_OBS_TM').getText();
var formatedtime= time.substr(0, 4) + "-" + time.substr(4, 2) + "-" + time.substr(6, 2) + " " + time.substr(8, 2) + ":00";
sheet.getRange(2, 5).setValue(formatedtime);

for (var i = 0; i < xml_rows.length; i++) {

var place = xml_rows[i].getChild('STN_NM').getText();
var temperature = xml_rows[i].getChild('SAWS_TA_AVG').getValue();
var humidity = xml_rows[i].getChild('SAWS_HD').getValue();

sheet.getRange(numRows, 1).setValue(place);
sheet.getRange(numRows, 2).setValue(temperature);
sheet.getRange(numRows, 3).setValue(humidity);
numRows++;

}

}

※ (인증키)는 오픈 API 사용하기 위해 별도로 발급받은 키입니다.
공공데이터를 이용하시려면 회원 가입 후 인증키를 발급받아서 사용하시기 바랍니다.

오픈 API 이용안내 

오픈API는 다양한 서비스와 데이터를 좀 더 쉽게 이용할 수 있도록 공개한 개발자를 위한 인터페이스입니다.
열린데이터광장에서 제공하는 오픈API를 사용하기 위해서는 먼저 인증키를 발급받으셔야 합니다.

 

프로젝트 저장 후, 실행 > 함수 실행 > myFuction 을 클릭합니다.

xml04.png

데이터 항목이 많았기 때문에 전부 표시하지는 않고,
일부 데이터를 선별하여 시트에 표시했습니다.xml01샘플 스프레드시트: [Apps Script] 서울특별시 기상 정보

다만.. 원래는 주기적으로 갱신되는 기상 정보 데이터입니다만, 현재(2019년 4월 13일) 측정일시가 2019032709인 데이터만 나오고 있습니다. 공공데이터 쪽의 문제로 갱신되고 있지 않은 것 같습니다. 댓글을 읽어보았을 때, 가끔 이러한 문제가 발생하는 것 같습니다.

 

xml처럼 json역시 쉽게 파싱할 수 있습니다.
자세한 내용은 External APIs > Work with JSON을 참고하시기 바랍니다.

 

구글 앱스 스크립트의 다른 활용법을 알고싶으시다면!
» G Suite 사용법 #5 앱스 스크립트 활용 예시 모음

(동영상 강의 광고)

스프레드시트로 만든 가계부인데
스마트폰에서도 쓰기 쉽다고?

스마트폰에서도 쓰기 쉬운 스프레드시트 가계부

댓글

“앱스 스크립트 사용법 (5) xml 파싱” 글의 댓글 3개

  1. leeyj 아바타
    leeyj

    감사합니다 도움이 많이 되었습니다.

    좋아요

  2. 빠방타자 아바타
    빠방타자

    감사합니다.
    작성해주신 방법으로 아파트 실거래가를 출력해보고 있는데요..

    어쩔때는 실행이 되고 어쩔때는 Timeout (GS:URLFETCHAPP 있는 행)이 나오면서 실행이 안되고 하네요..

    혹시 이유를 아실까요?

    좋아요

    1. SmartAgent 아바타

      관련 내용을 검색해보니 xml을 받는데 1분이상 걸리면 timeout이 발생하는 것같습니다.

      관련 포스팅
      UrlFetchApp timeout
      https://stackoverflow.com/questions/59301260/urlfetchapp-timeout
      UrlFetchApp [1] have a 1 minute timeout.

      좋아요

leeyj님에게 덧글 달기 응답 취소