javascript

21. [최종] Momentum 만들기 9 - 날짜 API 연결

으누아빠 2020. 6. 30. 16:27
반응형

외부에서 가져온 날짜 API를 호출

  1. 우선 디바이스의 위치정보를 불러온다.
  2. 가져온 위치 정보를 로컬 디바이스에 저장하고 이를 이용 날짜 정보를 가져온다.

키워드1. Navigator 인터페이스

  • 사용자 에이전트의 상태와 신원 정보를 나타냄
  • Navigator.geolocation : 디바이스 위치에 접근을 허용하기 위한 객체를 반환

키워드2. fetch API

  • 네트워크 통신을 포함한 리소스 취득을 위한 인터페이스
  • IE 에서는 지원하지 않음 [polyfill 이용]
  • Promise를 기반으로 되어 있음

기본구조

 fetch('http://example.com/movies.json')
 .then(function(response) {
     return response.json();
 })
 .then(function(myJson) {
     console.log(JSON.stringify(myJson));
 });

전체코드

weather.js

'use strict';

const weather = document.querySelector('.js-weather');

const COORDS = 'coords';
const API_KEY = '21a1aa875d2b483d359b8c44fbe2d5ab';

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.innerHTML = `${temperature} @ ${place}`;
        });
}

function saveCoords(coordsObj) {
    localStorage.setItem(COORDS, JSON.stringify(coordsObj));
}

function positionCallback(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    const coordsObj = {
        latitude: latitude,
        longitude: longitude
    };
    saveCoords(coordsObj);
    getWeather(latitude, longitude);
}

function errorCallback(error) {
    console.log(error);
}

function askForCoords() {
    navigator.geolocation.getCurrentPosition(positionCallback, errorCallback);
}

function init() {
    const loadCoords = localStorage.getItem(COORDS);
    if (loadCoords === null) {
        askForCoords();
    } else {
        const parseCoords = JSON.parse(loadCoords);
        getWeather(parseCoords.latitude, parseCoords.longitude);
    }
}

init();

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Something</title>
        <link rel="stylesheet" href="index.css" />
        <script defer src="clock.js"></script>
        <script defer src="greeting.js"></script>
        <script defer src="todo.js"></script>
        <script defer src="bg.js"></script>
        <script defer src="weather.js"></script>
    </head>
    <body>
        <div class="js-clock">
            <h1 class="js-title">00:00</h1>
        </div>
        <form class="js-form form">
            <input type="text" placeholder="What is your name?" />
        </form>
        <h4 class="js-greetings greetings"></h4>
        <form class="js-toDoForm">
            <input type="text" placeholder="Write a to do" />
        </form>
        <ul class="js-toDoList"></ul>
        <span class="js-weather"></span>
    </body>
</html>