17. ์น API ํ์ฉํ๊ธฐ
API (Application Programming Interfase)
์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ํ๋์ ํ๋ก๊ทธ๋จ๊ณผ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ์ฝ๊ฒ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ๋์์ฃผ๋ ์ธํฐํ์ด์ค
์ฟ ํค์ ์น ์คํ ๋ฆฌ์ง
์ฟ ํค
์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์ ์ํด์ ์น ์ฌ์ดํธ๋ฅผ ์ํํ๋ ๋์ ์ฌ์ฉ์ ์ปดํจํฐ์ ์ ์ฅ๋๋ ํ ์คํธ ํ์ผ
์น ์ฌ์ดํธ๋ฟ๋ง ์๋๋ผ ์ ์ํ๋ ๊ฐ์ธ์ ์ ๋ณด๊ฐ ์ ์ฅ->์ฌ์ํ ์นจํด ์ฐ๋ ค,๋ณด์๋ฌธ์
์น ์คํ ๋ฆฌ์ง
์น์ฌ์ดํธ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์ฅ
์ฌ์ฉ์๊ฐ ์ผ๋ถ๋ฌ ์คํ ๋ฆฌ์ง ์ ๋ณด๋ฅผ ์๋ฒ๋ก ์ ์กํ์ง ์๋ ์ด์
์๋ฒ์์ ์ฌ์ฉ์ PC๋ก ๋ค์ด์ ์คํ ๋ฆฌ์ง ์ ๋ณด๋ฅผ ์ฝ์ด๊ฐ์ง ๋ชปํ๋ค
- ๊ตฌ์ฑ
์ธ์ ์คํ ๋ฆฌ์ง: ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ๋ ์๊ฐ๋ถํฐ ๋ซ์๋๊น์ง๋ฅผ ํ๋์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค, ์ฐฝ์ด ๋ซํ๋ฉด ๋ฐ์ดํฐ ์ญ์
๋ก์ปฌ ์คํ ๋ฆฌ์ง: ์ธ์ ์ด ๋๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ์คํ ๋ฆฌ์ง, ์ฌ์ฉ์๊ฐ ์ง์ ์ญ์ ํ๊ธฐ ์ ๊น์ง ๋ณด๊ด
.parentElement()
ํด๋น ๋ ธ๋์ ๋ถ๋ชจ ์์(Element Object)๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ถ๋ชจ ์์๊ฐ ์๊ฑฐ๋ ๋ถ๋ชจ๊ฐ DOM ์์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ null์ ๊ฐ๋๋ค.
.children()
์ด๋ค ์์์ ์์ ์์๋ฅผ ์ ํํฉ๋๋ค.
geolocation ๊ฐ์ฒด
๊ฐ๋จํ ์์น๋ฅผ ์์๋ด๊ณ ์์ง์ด๋ ์ฌ์ฉ์์ ์์น๊น์ง ์ถ์ฒ ๊ฐ๋ฅ
window.navigator๊ฐ์ฒด์ ์์ ๊ฐ์ฒด์ธ geolocation ๊ฐ์ฒด์ ํฌํจ๋์ด ์๋ค
- ์ฌ์ฉ์์ ํ์ฌ ์์น ํ์ธ getCurrentPosition(์ฑ๊ณต์์ฝ๋ฐฑํจ์(,์คํจ์ ์ฝ๋ฐฑํจ์, ์ต์ ))
-์ง์ ํ ์๊ฐ๋ง๋ค ์์น ํ์ธ watchPosition(์ฑ๊ณต์์ฝ๋ฐฑํจ์(,์คํจ์ ์ฝ๋ฐฑํจ์,์ต์ )) + clearWatch(id)
๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ์ฌ TodoList ๋ง๋ค๊ธฐ
const todoInput=document.querySelector("#todo-input");
const addBtn=document.querySelector("#add-button");
const todoList=document.querySelector("#todo-list");
document.addEventListener("DOMContentLoaded",getLocal);
addBtn.addEventListener("click",addTodo);
todoList.addEventListener("click",manageTodo);
function addTodo(e){
e.preventDefault();
const newDiv=document.createElement("div");
newDiv.classList.add("todo");
const newTodo=document.createElement("li");
newTodo.innerText=todoInput.value;
newTodo.classList.add("todo-content");
newDiv.appendChild(newTodo);
saveToLocal(todoInput.value);
const completeBtn=document.createElement("button");
completeBtn.innerText="์๋ฃ";
completeBtn.classList.add('complete-btn');
newDiv.appendChild(completeBtn);
const deleteBtn=document.createElement("button");
deleteBtn.innerText="์ญ์ ";
deleteBtn.classList.add("delete-btn");
newDiv.appendChild(deleteBtn);
todoList.appendChild(newDiv);
todoInput.value="";
}
function saveToLocal(todo){
let todos;
if(localStorage.getItem("todos")===null){
todos=[];
}else{
todos=JSON.parse(localStorage.getItem("todos"));
}
todos.push(todo);
localStorage.setItem("todos",JSON.stringify(todos));
}
function getLocal(){
let todos;
if(localStorage.getItem("todos")===null){
todos=[];
}else{
todos=JSON.parse(localStorage.getItem("todos"));
}
todos.forEach(function(todo){
const newDiv=document.createElement("div");
newDiv.classList.add("todo");
const newTodo=document.createElement("li");
newTodo.innerText=todo;
newTodo.classList.add("todo-content");
newDiv.appendChild(newTodo);
const completeBtn=document.createElement("button");
completeBtn.innerText="์๋ฃ";
completeBtn.classList.add("complete-btn");
newDiv.appendChild(completeBtn);
const deleteBtn=document.createElement("button");
deleteBtn.innerText="์ญ์ ";
deleteBtn.classList.add("delete-btn");
newDiv.appendChild(deleteBtn);
todoList.appendChild(newDiv);
todoInput.value="";
});
}
function manageTodo(e){
const whichButton=e.target.classList[0];
if(whichButton ==='complete-btn'){
const todo=e.target.parentElement;
todo.children[0].toggle('completed');
}else if(whichButton ==='delete-btn'){
const todo=e.target.parentElement;
removeLocal(todo);
todo.remove();
}
function removeLocal(todo){
let todos;
if(localStorage.getItem("todos")===null){
todos=[];
}else{
todos=JSON.parse(localStorage.getItem("todos"));
}
const index=todos.indexOf(todo.children[0].innerText);
//console.log(index);
todos.splice(index,1);
localStorage.setItem("todos",JSON.stringify(todos));
}
}
watchPosition ์ ์ด์ฉํด ์๋,๊ฒฝ๋
const geoBtn=document.querySelector("#getLocation");
const result=document.querySelector("#result");
geoBtn.addEventListener("click",(e)=>{
e.preventDefault();
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,errorPosition);
const options={
enableHighAccuracu:true,
timeout:5000,
maximumAge:0
};
let watchId=navigator.geolocation.watchPosition(showPosition,errorPosition,options);
setTimeout(function(){
navigator.geolocation.clearWatch(watchId);
},30000)
}else{
alert("์ง์ค๋ก์ผ์ด์
์ ์ง์ํ์ง ์์ต๋๋ค.");
}
});
function showPosition(position){
result.innerHTML=`
<b>์๋ : </b> ${position.coords.latitude},
<b>๊ฒฝ๋ : </b> ${position.coords.longitude}`;
};
function errorPosition(err){
alert(err.message);
}
18.๊ณต๊ฐ API ํ์ฉํ๊ธฐ
๊ณต๊ณต๋ฐ์ดํฐ์ ์ข ๋ฅ
ํ์ผ๋ฐ์ดํฐ
ํ์ผํํ๋ก ์ ๊ณต, ๋ก๊ทธ์ธํ์ง ์์๋ ๋ค์ด๋ก๋ํด์ ์ฌ์ฉ ๊ฐ๋ฅ
์คํ API
ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ํ์คํํ๊ณ ๊ณต์ ํ๋ ํํ,์ค์๊ฐ ์ ๋ณด ์์ ๊ฐ๋ฅ
ํญ์ ์ต์ ์ ๋ณด ์ ์ง
ํ์ค๋ฐ์ดํฐ
๊ณต๊ณต๊ธฐ๊ด๋ง๋ค ์๋ก ๋ค๋ฅธ ํ์์ผ๋ก ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๊ฐ์ง ํ์ค์ผ๋ก ํต์ผํ์ฌ ์ ๊ณต
์บ ํ์ฅ ๋ง์ปค ํด๋ฌ์คํฐ
<script>
const lat = 37.55684;
const lng = 126.91404;
var mapContainer = document.getElementById('map'), // ์ง๋๋ฅผ ํ์ํ div
mapOption = {
center: new kakao.maps.LatLng(lat, lng), // ์ง๋์ ์ค์ฌ์ขํ - ์ด์ง์คํผ๋ธ๋ฆฌ์ฑ
level: 14 // ์ง๋์ ํ๋ ๋ ๋ฒจ
};
// ์ง๋๋ฅผ ํ์ํ div์ ์ง๋ ์ต์
์ผ๋ก ์ง๋๋ฅผ ์์ฑํฉ๋๋ค
var map = new kakao.maps.Map(mapContainer, mapOption);
// ๋ง์ปค ํด๋ฌ์คํฐ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค
var clusterer = new kakao.maps.MarkerClusterer({
map: map, // ๋ง์ปค๋ค์ ํด๋ฌ์คํฐ๋ก ๊ด๋ฆฌํ๊ณ ํ์ํ ์ง๋ ๊ฐ์ฒด
averageCenter: true, // ํด๋ฌ์คํฐ์ ํฌํจ๋ ๋ง์ปค๋ค์ ํ๊ท ์์น๋ฅผ ํด๋ฌ์คํฐ ๋ง์ปค ์์น๋ก ์ค์
minLevel: 10 // ํด๋ฌ์คํฐ ํ ์ต์ ์ง๋ ๋ ๋ฒจ
});
// ์๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ (๊ด๊ด๊ณต์ฌ API)
const url = '(์์ฑ)';
fetch(url)
.then(res => res.json())
.then(json => {
const data = json.response.body.items.item;
// ๋ง์ปค๋ค์ ๋ชจ์๋์ ๋ณ์
var markers = [];
for(let i = 0; i < data.length; i++) {
// ๋ง์ปค๋ฅผ ์์ฑํฉ๋๋ค
var marker = new kakao.maps.Marker({
map: map,
position: new kakao.maps.LatLng(data[i].mapY, data[i].mapX)
});
markers.push(marker); // ๋ง์ปค๋ฅผ ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค
var infowindow = new kakao.maps.InfoWindow( {
content : data[i].facltNm // ์ธํฌ์๋์ฐ์ ํ์ํ ๋ด์ฉ
});
// ๋ง์ปค์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํฉ๋๋ค
// ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก๋ ํด๋ก์ ๋ฅผ ๋ง๋ค์ด ๋ฑ๋กํฉ๋๋ค
// ํด๋ก์ ๋ฅผ ๋ง๋ค์ด ์ฃผ์ง ์์ผ๋ฉด ๋ง์ง๋ง ๋ง์ปค์๋ง ์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋ฉ๋๋ค
// ๋ง์ปค์ ๋ง์ฐ์ค์ค๋ฒํ๋ฉด makeOverListener() ์คํ
kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow));
// ๋ง์ปค์์ ๋ง์ฐ์ค์์ํ๋ฉด makeOutListener() ์คํ
kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow));
}
// ์ธํฌ์๋์ฐ๋ฅผ ํ์ํ๋ ํด๋ก์ ๋ฅผ ๋ง๋๋ ํจ์์
๋๋ค
function makeOverListener(map, marker, infowindow) {
return function() {
infowindow.open(map, marker);
};
}
// ์ธํฌ์๋์ฐ๋ฅผ ๋ซ๋ ํด๋ก์ ๋ฅผ ๋ง๋๋ ํจ์์
๋๋ค
function makeOutListener(infowindow) {
return function() {
infowindow.close();
};
}
clusterer.addMarkers(markers);
}); // fetch ๋
</script>'๊ณต๋ถ ๊ธฐ๋ก โ๏ธ > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Do-it! JS ์ค์ต ๋ณต์ต #unit2 (0) | 2023.04.07 |
|---|---|
| Do-it! JS ์ค์ต ๋ณต์ต #unit1 (0) | 2023.04.06 |
| JS-Do it! JS - #11์ผ (16) (0) | 2023.04.01 |
| JS-Do it! JS - #10์ผ (14,15) (0) | 2023.04.01 |
| JS-Do it! JS - #9์ผ (11,12,13) (0) | 2023.03.30 |