본문 바로가기
JavaScript

[JavaScript] OpenWeatherMap API 사용하여 간단한 날씨 정보 대시보드 만들기

by teamnova 2024. 2. 12.

안녕하세요 오늘은  OpenWeatherMap API 사용하여 간단한 날씨 정보 대시보드를 만들어보겠습니다.

 

OpenWeatherMap API 를 사용하려면 https://openweathermap.org/ 에서 무료로 api 키를 발급받아야 합니다.

 

api키를 발급 받은 후 

 

index.html 파일에 다음과 같이 코드를 작성해줍니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>날씨 정보 대시보드</title>
    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
</head>
<body class="bg-gray-100">
    <div class="container mx-auto p-8">
        <h1 class="text-2xl font-bold mb-6">날씨 정보 대시보드</h1>
        <input type="text" id="city-input" class="border p-2 w-full" placeholder="도시 이름 입력...">
        <button onclick="fetchWeather()" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mt-3">
            날씨 조회
        </button>
        <div id="weather-result" class="mt-6">
            <!-- 날씨 정보가 여기에 표시됩니다 -->
        </div>
    </div>
    <script src="./script.js"></script>
</body>
</html>

 

 

그다음 script.js 파일에 다음과 같이 코드를 작성해 줍니다.

 

async function fetchWeather() {
  console.log('fetchWeather')
  let city = document.getElementById('city-input').value.trim();
  if (city) {
    let apiKey = '발급받은 내 API 키'; // OpenWeatherMap API 키
    let url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric&lang=kr`;

    try {
      let response = await fetch(url);
      console.log(response)

      let data = await response.json();
      console.log(data)

      displayWeather(data);
    } catch (error) {
      console.error('날씨 정보를 가져오는데 실패했습니다.', error);
    }
  }
}

function displayWeather(data) {
  let weatherDiv = document.getElementById('weather-result');
  weatherDiv.innerHTML = `
      <h2 class="text-xl">${data.name}의 날씨</h2>
      <p>온도: ${data.main.temp}°C</p>
      <p>상태: ${data.weather[0].description}</p>
  `;
}

 

 

그러면 다음과 같은 결과물을 얻을 수 있습니다.