Raspberry pi

공공데이터포털 nodejs로 일출 일몰 시간 가져오기

[혜안] 2022. 3. 17. 23:57
728x90

일몰시간에 맞춰 자동으로 켜지는 간접조명을 만드는 프로젝트의 일환으로, 일몰시간을 가져오는 방법을 찾아보았다.

2022.03.16 - [Arduino] - 간접조명을 만들고 일몰시간에 자동으로 켜지게 할 수 있을까? #1

 

간접조명을 만들고 일몰시간에 자동으로 켜지게 할 수 있을까? #1

오랜만에 버려진 재료들을 가지고 다시 뭔가를 만들어 보려고 한다. 집안 한구석이 어두워서 조명을 설치하고 싶은데, 전원 연결이 어렵고, 매번 껐다 켜기 번거롭다. 재료는, 1. 아두이노 (NodeMCU

viewise.tistory.com

 

공공데이터포털에서 API 제공을 해주고 있었고, 

단지 API 리턴값이 xml인 관계로 파싱하는 작업이 추가로 필요하다.

처음에는 cheerio를 이용해서 간단히 xml 파싱을 하려고 했지만 생각보다 복잡해져서,

json 파싱으로 방법을 바꾸었다.

 

필요한 패키지는 xml-js, date-util 정도.

date-util: 원하는 날짜의 일몰시간을 가져와야 하므로 날짜를 원하는 포맷으로 만드는 용도

xml-js: xml로 리턴된 결과를 json으로 파싱해서 원하는 값만 추출하는 용도

샘플 소스

var request = require('request');
var convert = require('xml-js');
var date = require('date-utils');

var url = 'http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService/getAreaRiseSetInfo';
var queryParams = '?' + encodeURIComponent('serviceKey') + '개인별 서비스 키 입력'; /* Service Key*/
queryParams += '&' + encodeURIComponent('locdate') + '=' + encodeURIComponent(new Date().toFormat('YYYYMMDD')); /* */
queryParams += '&' + encodeURIComponent('location') + '=' + encodeURIComponent('서울'); /* */

request({
    url: url + queryParams,
    method: 'GET'
}, function (error, response, body) {

    //console.log('Status', response.statusCode);
    //console.log('Headers', JSON.stringify(response.headers));
    //console.log('Reponse received', body);

    var json = convert.xml2json(body, {compact: true, spaces: 4});
    var data = JSON.parse(json).response.body.items.item;
    var loc = data['location']._text;
    var locdate = data['locdate']._text;
    var sunrise = data['sunrise']._text;
    var sunset = data['sunset']._text;

    console.log('Location: ', loc);
    console.log('Date: ', locdate);
    console.log('Sunrise Time: ', sunrise);
    console.log('Sunset Time: ', sunset);    
});

 

결과값

Location:  서울
Date:  20220317
Sunrise Time:  0641
Sunset Time:  1841

 

이제 타이머로 하루 한번 돌면서 간접조명에 명령을 날리는 방법을 찾아봐야지~

728x90