이번에는 구글 앱스 스크립트를 사용하여 xml 파일을 읽어들이고, 읽은 데이터를 스프레드시트에 표시하는 시트를 만들어보겠습니다.
참조하는 xml은 공공데이터 포털사이트 https://www.data.go.kr/ 의 서울특별시 관측소별 기상관측 정보(시간단위)에서 제공하는 오픈 API를 통해 접근했습니다.
오픈 API로 접근한 xml
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를 사용하기 위해서는 먼저 인증키를 발급받으셔야 합니다.
프로젝트 저장 후, 실행 > 함수 실행 > myFuction 을 클릭합니다.
데이터 항목이 많았기 때문에 전부 표시하지는 않고,
일부 데이터를 선별하여 시트에 표시했습니다.샘플 스프레드시트: [Apps Script] 서울특별시 기상 정보
다만.. 원래는 주기적으로 갱신되는 기상 정보 데이터입니다만, 현재(2019년 4월 13일) 측정일시가 2019032709인 데이터만 나오고 있습니다. 공공데이터 쪽의 문제로 갱신되고 있지 않은 것 같습니다. 댓글을 읽어보았을 때, 가끔 이러한 문제가 발생하는 것 같습니다.
xml처럼 json역시 쉽게 파싱할 수 있습니다.
자세한 내용은 External APIs > Work with JSON을 참고하시기 바랍니다.
구글 앱스 스크립트의 다른 활용법을 알고싶으시다면!
» G Suite 사용법 #5 앱스 스크립트 활용 예시 모음
감사합니다 도움이 많이 되었습니다.
좋아요좋아요
감사합니다.
작성해주신 방법으로 아파트 실거래가를 출력해보고 있는데요..
어쩔때는 실행이 되고 어쩔때는 Timeout (GS:URLFETCHAPP 있는 행)이 나오면서 실행이 안되고 하네요..
혹시 이유를 아실까요?
좋아요좋아요
관련 내용을 검색해보니 xml을 받는데 1분이상 걸리면 timeout이 발생하는 것같습니다.
관련 포스팅
UrlFetchApp timeout
https://stackoverflow.com/questions/59301260/urlfetchapp-timeout
UrlFetchApp [1] have a 1 minute timeout.
좋아요좋아요