국가법령정보 API 사용 방법개발2024. 9. 27. 11:38
Table of Contents
API 신청
API를 요청할 서버 IP와 도메인을 등록하고, 원하는 API를 체크하면 끝이다.
Javascript 구현 코드
const LAW_API_BASE_URL = "https://www.law.go.kr";
/**
* 법제처 API 요청 파라미터 클래스
* 생성자에서 필수 파라미터를 생성하고, addField 메소드로 필요한 파라미터를 추가
*/
class LawApiParams {
constructor(target, type = "XML") {
this.OC = "API 신청한 이메일의 아이디 부분"; //ex) abc123@email.com => abc123
this.type = type; //XML or HTML
this.target = target; //API 종류
}
addField(key, value) {
this[key] = value;
return this;
}
}
/**
* 법제처 API 요청
* @link https://open.law.go.kr/LSO/openApi/guideList.do
*
* @Param {string} urlPath API URL Path
* @param {LawApiParams} lawApiParams 법제처 API 요청 파라미터
* @returns JSON or HTML
* */
async function lawApiCall(urlPath, lawApiParams) {
try {
const response = await $.ajax({
url: LAW_API_BASE_URL + urlPath,
method: "GET",
data: lawApiParams,
});
return lawApiParams.type === "XML" ? xmlToJson(response) : response;
} catch (error) {
console.error("Error:", error);
throw error;
}
}
/**
* XML을 JSON으로 변환
*
* @param xml
* @returns json
*/
function xmlToJson(xml) {
let obj = {};
if (xml.nodeType == 1) {
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (let j = 0; j < xml.attributes.length; j++) {
let attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 3) {
obj = xml.nodeValue;
} else if (xml.nodeType == 4) {
obj = xml.nodeValue;
}
let textNodes = [].slice.call(xml.childNodes).filter(function (node) {
return node.nodeType === 3;
});
if (xml.hasChildNodes() && xml.childNodes.length === textNodes.length) {
obj = [].slice.call(xml.childNodes).reduce(function (text, node) {
return text + node.nodeValue;
}, "");
} else if (xml.hasChildNodes()) {
for (let i = 0; i < xml.childNodes.length; i++) {
let item = xml.childNodes.item(i);
let nodeName = item.nodeName;
if (typeof obj[nodeName] == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof obj[nodeName].push == "undefined") {
let old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
}
'개발' 카테고리의 다른 글
MVC, MVP, MVVM 패턴 비교 (0) | 2024.10.23 |
---|---|
Python FastAPI 개념 정리 (1) _ 프로젝트 세팅 & 패키지 구조 (1) | 2024.09.28 |
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!