Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

노마드코더 JS로 크롬앱만들기) #8 WEATHER - geolocation, fetch 본문

Javascript/노마드코더 - JS로 크롬앱 만들기

노마드코더 JS로 크롬앱만들기) #8 WEATHER - geolocation, fetch

끈기JK 2022. 9. 27. 15:06

■ 날씨

 

*navigator.geolocation.getCurrentPosition(성공시 실행할 함수, 실패시 실행할 함수)

*console.log 확인시 latitude(위도), longitude(경도) 확인 가능

function onGeoOk(position) {
    console.log(position);
}
function onGeoError() {
    alert("Can't find you. No weather for you.");
}

navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError);

 

위를 토대로 위도, 경도 가져온다.

function onGeoOk(position) {
    const lat = position.coords.latitude;
    const lng = position.coords.longitude;
    console.log("You live in", lat, lng);
}
function onGeoError() {
    alert("Can't find you. No weather for you.");
}

navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError);

 

날씨 정보 가져올 사이트: https://openweathermap.org/ 가입해서 Geocoding API 가져온다.

*API : 다른 서버와 이야기할 수 있는 방법

 

My API keys에서 Key 복사해 상수로 저장한다.

const API_KEY = "14b12daf543b404115d9861b83d898a9";

 

Current Weather Data - API doc 클릭

API call 복사

{lat}, {lon}, {API key}에 적절한 숫자 입력하면 아래 처럼 나온다

const lat = position.coords.latitude;
const lon = position.coords.longitude;
const url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${API_KEY}`

 

-url 맨 끝에 &units=metric 붙이면 화씨가 섭씨로 바뀐다. 

*fetch(url) : 자바스크립트를 사용하면 필요할 때 서버에 네트워크 요청을 보내고 새로운 정보를 받아오는 일을 할 수 있다.

// weather.js
const API_KEY = "14b12daf543b404115d9861b83d898a9";

function onGeoOk(position) {
    const lat = position.coords.latitude;
    const lon = position.coords.longitude;
    const url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${API_KEY}&units=metric`
    console.log(url);
    fetch(url)
        .then(response => response.json())
        .then((data) => {
            const weather = document.querySelector("#weather span:nth-child(1)");
            const city = document.querySelector("#weather span:nth-child(2)");
            city.innerText = data.name;
            weather.innerText = `${data.weather[0].main} / ${data.main.temp}`;
        });
}
function onGeoError() {
    alert("Can't find you. No weather for you.");
}

navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError);
<!-- index.html -->
<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/style.css">
    <title>Momentum App</title>
</head>

<body>
    <h2 id="clock">00:00:00</h2>
    <form id="login-form" class="hidden">
        <input required maxlength="15" type="text" placeholder="What is your name?" />
        <input type="submit" value="Log In" />
    </form>
    <h1 id="greeting" class="hidden"></h1>
    <form id="todo-form">
        <input type="text" placeholder="Write a To Do and Press Enter">
    </form>
    <ul id="todo-list"></ul>
    <div id="quote">
        <span></span>
        <span></span>
    </div>
    <div id="weather">  // 4줄 추가
        <span></span>
        <span></span>
    </div>
    <script src="js/greetings.js"></script>
    <script src="js/clock.js"></script>
    <script src="js/quotes.js"></script>
    <script src="js/background.js"></script>
    <script src="js/todo.js"></script>
    <script src="js/weather.js"></script>
</body>

</html>