320x100
โ ์ด ํฌ์คํ ์ ๋ ธ๋ง๋์ฝ๋ - "๋ฐ๋๋ผ JS๋ก ํฌ๋กฌ ์ฑ ๋ง๋ค๊ธฐ๋ฅผ ๋ค์ผ๋ฉด์ ๊นํ๋ธ์ ๊ธฐ๋กํ ํ๊ธฐ๋ฅผ ์ฎ๊ธด ๋ด์ฉ์ ๋๋ค.
๋ชฉํ : ๐์ฌ์ฉ์์ ์์น ์ ๋ณด์ โ ํด๋น ์์น์ ๋ ์จ ํ์ํ๊ธฐ
๐ฑ User์ ์๋(latitude) , ๊ฒฝ๋(longitude) ๊ตฌํ๊ธฐ
๐ navigator ํจ์๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์์น๋ฅผ ์์๋ด๋ ์ฝ๋ ์์ฑ
- mdn ๋งํฌ
- JavaScript๊ฐ position์ ํตํด์ user์ ์์น๋ฅผ ์ ๋ฌํด์ค.
- position์ object์ด๊ณ , ์๋, ๊ฒฝ๋ ๊ฐ์ด ํฌํจ๋์ด ์๋ค.
- position( )ํจ์๋ 2๊ฐ์ ์ธ์๊ฐ ํ์ํ๋ค.
- ์ ์์ ์ผ๋ก ์คํ๋์ ๋์ ํจ์ (onGeoOk)
- ์คํ ์คํจํ์ ๋์ ํจ์ (onGeoError)
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);
๐ฑ OpenweatherApi ์ฌ์ฉ ์ค๋น
๐ OpenweatherApi ์ด์ฉํด์ user์ ํ์ฌ ์์น, ๋ ์จ Data ๋ฐ์์ค๋๋ก ์ค๋นํ๊ธฐ
- https://openweathermap.org
- ํ์๊ฐ์ ํ ๊ฐ์ธ Api key ๋ฐ๊ธ๋ฐ๊ธฐ
- https://openweathermap.org/api
- ๋ก๊ทธ์ธ ํ api doc ๋ชฉ๋ก์ผ๋ก ์ด๋
- Current Weather Data api๋ฅผ ์ฌ์ฉํ์ฌ ์์น, ๋ ์จ, ์จ๋ Data ๋ฐ์ ์ฌ ์ ์๋ค.
- ๐ก Tip!
- JSON ๋ฐ์ดํฐ๋ฅผ ํธํ๊ฒ ๋ณผ ์ ์๋ ๋ฐฉ๋ฒ
- ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ JSON Viewer ์ค์น
๐ฑ OpenweatherApi ์ฌ์ฉํ๊ธฐ
๐ User์ ํ์ฌ ์์น, ๋ ์จ Data ๋ฐ์์ค๊ธฐ
https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}
- ์ด ์ฃผ์์ ์์์ ๊ตฌํ lat, lon, api key๋ฅผ ๋ฃ์ ํ ํฌ๋กฌ ์ฃผ์์ฐฝ์ ๊ฒ์ํด๋ณธ ๋ค ๊ฐ์ด ์ ๋์จ๋ค๋ฉด ๋ค์ ๊ณผ์ ์ ์งํํ ์ ์๋ค.
- ์ด์ url์์ ํ์ํ ๊ฐ์ get ํด๋ณผ ๊ฒ์ด๋ค.
- ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ์๋ก ์ด๋ํด์ ์๋ตํ์ฌ ๊ฐ์ ๋ณด์ฌ์ค๋ค.
- javaScript๋ ๋งํฌ๋ฅผ ๋๋ฅด๋ ๋์ fetch๋ฅผ ์ฌ์ฉํด์ url์ call ํด์ค๋ค.
- ์ป๊ณ ์ ํ๋ ๋ฐ์ดํฐ
- ์ฐ๋ฆฌ๊ฐ ์๋ ์ฅ์์ ์ด๋ฆ (์์ธ, ๋ถ์ฐ...)
- ์ฅ์์ ๋ ์จ (๋ง์, ํ๋ฆ, ๋น...)
- ๊ธฐ์จ (์ง๊ธ์ ํ์จ์จ๋๋ก ๋์ด์๋๋ฐ, ์ญ์จ์จ๋๋ก ๋ฐ๊พธ๊ธฐ ์ํด์ api doc์ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.)
- ํ์จ(Fahrenheit) → ์ญ์จ(Celsius) ๋ณํ ๋ฐฉ๋ฒ
- units์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๊ฐ๊ฐ imperial(ํ์จ), metric(์ญ์จ), standard(์ ๋์จ๋)๋ฅผ ์๋ฏธ
- url ๋์ &units=metric์ ๋ถ์ด๋ฉด ์ญ์จ์จ๋๊ฐ ํฌํจ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
const url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${API_KEY}&units=metric`;
- fetch๊ฐ ์ผ์ด๋๋ ๊ฒ์ ๊ฐ๋จํ์ง ์์ ๊ณผ์ ์ด๋ค
- fetch๋ promise์ด๋ค.
- promise๋ ๋น์ฅ ๋ญ๊ฐ ์ผ์ด๋์ง ์๊ณ ์๊ฐ์ด ์ข ์ง๋ ๋ค์ ์ผ์ด๋๋ ๊ฒ์ด๋ค.
- ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ด์ฉ ์ถ์ถ → Data ์ป๊ธฐ ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์๋์ ํํ๋ก ์ฌ์ฉ
fetch(url).then(reponse => response.json()).then(data => {
// ๊ธฐ๋ค๋ฆฐ ํ ์คํํ๋ ค๋ ์ฝ๋ ์
๋ ฅํ๋ ๊ณณ
})
// ์์)
fetch(url).then(reponse => response.json()).then(data => {
console.log(data.name, data.weather[0].main)
})
๐ฑ User์ ์์น, ๋ ์จ, ๊ธฐ์จ ์ป๋ ๋ฐฉ๋ฒ
๐ ์ ์ฒด ์ฝ๋ ์ดํด๋ณด๊ธฐ
- json data๋ฅผ ํตํด ์ป์ ์ ์๋ Data
- ์์น : data.name
- ๋ ์จ : data.weather[0].main
- ์ญ์จ ๊ธฐ์จ : data.main.temp
- html
<div id="weather">
<span></span>
<span></span>
</div>
- javaScript
const weather = document.querySelector("#weather span:first-child");
const city = document.querySelector("#weather span:last-child");
const API_KEY = "๊ฐ์
ํ๋ฉด์ ๋ฐ์ api key";
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`;
fetch(url)
.then((response) => response.json())
.then((data) => {
city.innerHTML = data.name;
weather.innerText = `${data.weather[0].main} / ${data.main.temp}`;
});
console.log(url);
}
function onGeoError() {
alert("Can't find you. No weather for you.");
}
navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError);
๋ฐ์ํ
'JavaScript > Nomad Coders' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๐ก Day 10 - JavaScript๋ก TodoList ๋ง๋ค๊ธฐ (0) | 2022.05.01 |
---|---|
[TIL] ๐ก Day 9 - ๋๋ค์ผ๋ก ๋ช ์ธ, ๋ฐฐ๊ฒฝ ์ค์ ํ๊ธฐ (0) | 2022.04.16 |
[TIL] ๐ก Day 8 - JavaScript๋ก ํ์ด๋จธ ๋ง๋ค๊ธฐ (0) | 2022.04.16 |
[TIL] ๐ก Day 7 - Javascript value getting, saving, loading ํ๋ ๋ฐฉ๋ฒ (0) | 2022.04.01 |
[TIL] ๐ก Day 6 - ํจ์๋ ์ ๋ณด๋ฅผ ๋ด๊ณ (0) | 2022.03.31 |
๋๊ธ