آموزش جامع ساخت اپلیکیشن آب و هوا با جاوااسکریپت


🎯 اهداف یادگیری

  • آشنایی با کار با API های خارجی در جاوااسکریپت
  • یادگیری Fetch API برای دریافت داده‌های آب و هوا
  • پیاده سازی جستجوی شهرها و نمایش اطلاعات
  • استفاده از localStorage برای ذخیره شهرهای جستجو شده
  • نمایش آیکن‌های متناسب با شرایط جوی

📌 معرفی پروژه

در این پروژه قصد داریم یک اپلیکیشن آب و هوای ساده با قابلیت‌های زیر ایجاد کنیم:

javascript
const features = [
"جستجوی آب و هوای شهرها",
"نمایش دمای فعلی، حداقل و حداکثر",
"نمایش شرایط جوی (آفتابی، ابری، بارانی و ...)",
"ذخیره تاریخچه جستجوها",
"نمایش اطلاعات اضافی مانند رطوبت و سرعت باد"
];

ساختار پروژه:

  • HTML: ساختار اصلی صفحه و فرم جستجو
  • CSS: استایل‌دهی به کارت‌های آب و هوا
  • JavaScript: ارتباط با API و نمایش داده‌ها

📌 بخش اول: ساختار HTML

ابتدا ساختار اصلی صفحه را ایجاد می‌کنیم:

html
<!-- ساختار اصلی برنامه -->
<div class="weather-container">
<h1>اپلیکیشن آب و هوا</h1>
<div class="search-section">
<input type="text" id="city-input" placeholder="نام شهر را وارد کنید...">
<button id="search-btn">جستجو</button>
</div>
<div class="weather-card">
<div class="city-name">تهران</div>
<div class="weather-icon">☀️</div>
<div class="temp">25°C</div>
<div class="description">آفتابی</div>
<div class="details">
<div>حداقل: 18°C</div>
<div>حداکثر: 30°C</div>
<div>رطوبت: 45%</div>
<div>سرعت باد: 10 km/h</div>
</div>
</div>
<div class="history-section">
<h3>تاریخچه جستجو</h3>
<ul id="history-list"></ul>
</div>
</div>

📌 بخش دوم: استایل‌دهی با CSS

برای زیباتر شدن برنامه، استایل‌های زیر را اضافه می‌کنیم:

css
.weather-container {
max-width: 600px;
margin: 0 auto;
padding: 20px;
font-family: 'Segoe UI', Tahoma, sans-serif;
}
.weather-card {
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
text-align: center;
margin-bottom: 20px;
}
.weather-icon {
font-size: 4rem;
margin: 10px 0;
}

📌 بخش سوم: منطق برنامه با جاوااسکریپت

حالا به بخش اصلی برنامه می‌رسیم که با جاوااسکریپت نوشته می‌شود:

javascript
// متغیرهای اصلی برنامه
const API_KEY = 'your_api_key_here'; // کلید API از OpenWeatherMap
const cityInput = document.getElementById('city-input');
const searchBtn = document.getElementById('search-btn');
const weatherCard = document.querySelector('.weather-card');
const historyList = document.getElementById('history-list');
// آرایه‌ای برای ذخیره تاریخچه جستجوها
let searchHistory = JSON.parse(localStorage.getItem('weatherHistory')) || [];
// تابع برای دریافت اطلاعات آب و هوا از API
async function getWeatherData(city) {
try {
const response = await fetch(
`https://api.openweathermap.org/data/2.5/weather?q=${city}&units=metric&appid=${API_KEY}`
);
if (!response.ok) {
throw new Error('شهر مورد نظر یافت نشد');
}
const data = await response.json();
displayWeather(data);
addToHistory(city);
} catch (error) {
alert(error.message);
}
}

توابع اصلی برنامه:

  • getWeatherData: دریافت اطلاعات از API آب و هوا
  • displayWeather: نمایش اطلاعات آب و هوا در صفحه
  • addToHistory: اضافه کردن شهر به تاریخچه جستجوها
  • renderHistory: نمایش تاریخچه جستجوها
  • getWeatherIcon: انتخاب آیکن مناسب برای شرایط جوی

📌 پیاده‌سازی توابع اصلی

حالا به سراغ پیاده‌سازی توابع اصلی می‌رویم:

javascript
// تابع برای نمایش اطلاعات آب و هوا
function displayWeather(data) {
const cityName = data.name;
const temp = Math.round(data.main.temp);
const minTemp = Math.round(data.main.temp_min);
const maxTemp = Math.round(data.main.temp_max);
const humidity = data.main.humidity;
const windSpeed = data.wind.speed;
const description = data.weather[0].description;
const icon = getWeatherIcon(data.weather[0].main);
document.querySelector('.city-name').textContent = cityName;
document.querySelector('.weather-icon').textContent = icon;
document.querySelector('.temp').textContent = `${temp}°C`;
document.querySelector('.description').textContent = description;
document.querySelector('.details div:nth-child(1)').textContent = `حداقل: ${minTemp}°C`;
document.querySelector('.details div:nth-child(2)').textContent = `حداکثر: ${maxTemp}°C`;
document.querySelector('.details div:nth-child(3)').textContent = `رطوبت: ${humidity}%`;
document.querySelector('.details div:nth-child(4)').textContent = `سرعت باد: ${windSpeed} km/h`;
}

📌 اضافه کردن رویدادها

حالا نوبت به اضافه کردن رویدادها می‌رسد:

javascript
// رویداد کلیک برای دکمه جستجو
searchBtn.addEventListener('click', () => {
const city = cityInput.value.trim();
if (city === '') return;
getWeatherData(city);
});
// رویداد کلیک برای تاریخچه جستجو
historyList.addEventListener('click', (e) => {
if (e.target.tagName === 'LI') {
const city = e.target.textContent;
getWeatherData(city);
}
});

📌 تست و راه‌اندازی

در نهایت برنامه را با دستور زیر راه‌اندازی می‌کنیم:

javascript
// بارگذاری اولیه تاریخچه جستجوها
document.addEventListener('DOMContentLoaded', () => {
renderHistory();
});

نتیجه نهایی:

حالا شما یک برنامه آب و هوای کامل دارید که می‌تواند:

  • اطلاعات آب و هوای شهرهای مختلف را نمایش دهد
  • تاریخچه جستجوها را ذخیره کند
  • آیکن مناسب برای شرایط جوی نمایش دهد
  • اطلاعات کامل شامل دما، رطوبت و سرعت باد را نشان دهد

📌 قدم بعدی

در درس بعدی با ساخت ماشین حساب در جاوااسکریپت آشنا خواهیم شد!

آموزش جامع ساخت اپلیکیشن آب و هوا با جاوااسکریپت