반응형
xml : Extensible Markup Language
텍스트 데이터, 계층 구조
xml -> js
// 모듈 로드
var parseString = require('xml2js').parseString;
// 테스트 용 XML 데이터
var xml = "<fruits shop='AAA'>" +
"<item price='140'>Banana</item>" +
"<item price='200'>Apple</item>" +
"</fruits>";
// XML 을 전달
parseString(xml, function (err, result) {
// console.log(JSON.stringify(result)); // --- ( ※ 1)
// fruits를 제공하는 가게 이름
var shop = result.fruits.$.shop;
console.log("shop=" + shop);
// furits의 이름과 가격을 표시
var items = result.fruits.item;
for (var i in items) {
var item = items[i];
console.log("-- name=" + item._);
console.log(" price=" + item.$.price);
}
});
// 모듈 로드
var parseString = require('xml2js').parseString;
// 테스트 용 XML 데이터
var xml =
"<items>" +
"<item><name>Banana</name><price>130</price></item>" +
"<item><name>Apple</name><price>300</price></item>" +
"<item><name>Pear</name><price>250</price></item>" +
"</items>";
// XML 전달
parseString(xml, function (err, r) {
//console.log(JSON.stringify(r));
// 각요소의 표시
console.log("---");
console.log(r.items.item[0].name[0]);
console.log(r.items.item[0].price[0]);
});
RSS : Rich Site Summary / Really Simple Syndication
XML 기반
기상예보 Rss 해석하기
http://web.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109
// 기상청 기상예보 RSS
var RSS = "http://web.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109";
// 모듈 로드
var parseString = require('xml2js').parseString;
var request = require('request');
// RSS 다운로드 ---- (※1)
request(RSS, function (err, response, body) {
if (!err && response.statusCode == 200) {
analyzeRSS(body);
}
});
// RSS 해석 ---- (※2)
function analyzeRSS(xml) {
// XML을 JS 오브젝트로 변환
parseString(xml, function (err, obj) {
if (err) {
console.log(err);
return;
}
// 기상 예보 정보 출력 ----- (※3)
//console.log(JSON.stringify(obj)); // ----- (※4)
var datas = obj.rss.channel[0].item[0].description[0].body[0].location[0].data;
var city = obj.rss.channel[0].item[0].description[0].body[0].location[0].city;
for (var i in datas) {
var data = datas[i];
console.log(city + " " + data.tmEf + " " + data.wf + " " + data.tmn + "~" + data.tmx);
}
});
}
cheerio-httpcli module
// 기상청 기상예보 RSS(cheerio이용) for Node.js
// 기상 RSS
var RSS = "http://web.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109";
// 모듈 로드
var client = require('cheerio-httpcli');
// RSS 다운로드
client.fetch(RSS, {}, function (err, $, res) {
if (err) {
console.log("error");
return;
}
var city = $("location:nth-child(1) > city").text();
// 필요한 항목을 추출해서 표시 ---------------------- (※1)
$("location:nth-child(1) > data").each(function (idx) {
var tmEf = $(this).find('tmEf').text();
var wf = $(this).find('wf').text();
var tmn = $(this).find('tmn').text();
var tmx = $(this).find('tmx').text();
console.log(city + " " + tmEf + " " + wf + " " + tmn + "~" + tmx);
});
});
반응형
'IT > web' 카테고리의 다른 글
Node.js] Rest Api (0) | 2020.02.21 |
---|---|
Node.js] 네이버 블로그 rss (0) | 2020.02.18 |
Node.js] 게시판 만들기4 / 글 수정 기능 (findByIdAndUpdate) (2) | 2020.02.14 |
Node.js] 게시판 만들기3 // 글 삭제 기능 (0) | 2020.02.13 |
Node.js] 게시판 만들기2 // 글 리스트 보기, 조회수 조회 (0) | 2020.02.12 |
댓글