특정 웹 사이트로부터 데이터를 얻거나 컴퓨터끼리 소통하기 위해 고안된 것이므로 개인적으로 API를 디자인할 필요 없다.
<head>
...
<script defer src="weather.js"></script>
</head>
//1. init
function init() {
loadCoords();
}
init();
const weather = document.querySelector(".js-weather");
사용법 바로가기
Units of measurement : 온도 단위 변경법
const API_KEY = "복사한 KEY 입력";
const COORDS = 'coords';
function handleGeoError() {
console.log("Can't access geo location");
}
function saveCoords(coordsObj){ // localStorage에 저장
localStorage.setItem(COORDS, JSON.stringify(coordsObj)); //stringify : string 값으로 저장
}
function askForCoords(){
navigator.geolocation.getCurrentPosition(handleGeoSucces, handleGeoError) //// 사용자 위치 요청 (요청 수락, 요청 거절)
}
function handleGeoSucces(position){
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const coordsObj = {
latitude, //객체의 변수 이름과 키의 이름을 갖게 하려면 키 값은 버리고 ,를 적어준다.
longitude
};
saveCoords(coordsObj); // 가져온 좌표 localStorage에 저장 함수
getWeather(latitude, longitude); //API를 통해 날씨를 가져옴
}
function getWeather(lat, lng){
fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lng}&appid=${API_KEY}&units=metric`).then(function(response){
return response.json();
})
.then(function(json){
const temperature = json.main.temp;
const place = json.name;
weather.innerText = `${temperature} °C / @ ${place}`;
}); //.then이 하는 역할은 데이터가 완전히 들어온 다음 함수를 호출한다.
}
function loadCoords(){
const loadedCoords = localStorage.getItem(COORDS); //localStorage에 있는 값을 가져오고
if(loadedCoords === null){ //값이 없으면
askForCoords(); //좌표요청
} else { //있으면 날씨 표시
const parsedCoords = JSON.parse(loadedCoords);
getWeather(parsedCoords.latitude, parsedCoords.longitude);
}
}
날씨 API 사이트 : Open Weather 회원가입 후 자신의 API keys에서 Key값을 복사한다.
복사한 key값을 .js 상단에 삽입한다.
사이트로 다시 돌아와 API -> Current Weather Data -> API doc로 들어간다.
아래로 내려가서 본인에게 맞는 코드를 찾는다. (latitude, langitude를 사용하여 By geographiv coordinates의 코드를 복사했다.)
.js 파일 상단에 코드를 삽입해준다.
const API_KEY = " 복사한 코드 삽입 ";
function getWeather(lat, lng){
fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lng}&appid=${API_KEY}&units=metric`).then(function(response){
return response.json();
})
.then(function(json){
const temperature = json.main.temp;
const place = json.name;
weather.innerText = `${temperature} °C / @ ${place}`;
}); //.then이 하는 역할은 데이터가 완전히 들어온 다음 함수를 호출한다.
function handleGeoSucces(position){
...
getWeather(latitude, longitude); //API를 통해 날씨를 가져옴
}
참고한 사이트