앱스 스크립트 사용법 (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 앱스 스크립트 활용 예시 모음

3 Replies to “앱스 스크립트 사용법 (5) xml 파싱”

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

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

    혹시 이유를 아실까요?

    좋아요

댓글 남기기