Привіт, розробники,
У цьому пості я проведу вас через процес створення додатку для інформаційної панелі погоди з нуля. Додаток отримує дані про погоду в реальному часі для кількох міст, зберігає їх у AWS S3 та динамічно відображає на веб-інтерфейсі за допомогою Flask.
Незалежно від того, чи ви початківець, чи розробник середнього рівня, цей проєкт — чудовий спосіб навчитися інтеграції API, роботі з хмарним сховищем та створенню функціональних веб-додатків.
Чому я створив це
Цей проєкт є частиною #DevOpsAllStarsChallenge. Я приєднався до цього челенджу, щоб отримати практичний досвід роботи з AWS.
Опис проєкту
Проста схема архітектури для інформаційної панелі погоди
Поетапний процес розробки
- Налаштування API погоди
Я почав з реєстрації на OpenWeatherMap та отримання свого API-ключа. Потім я використав їх API для отримання даних про погоду, таких як температура, вологість та умови для кількох міст.
import requests
def get_weather_data(city):
api_key = "your_api_key"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
response = requests.get(url)
return response.json()
- Зберігання даних у AWS S3
Після отримання даних про погоду, я зберіг їх у AWS S3 за допомогою бібліотеки boto3
для Python. Дані зберігаються у вигляді файлів JSON, що дозволяє пізніше отримувати їх для відображення.
def save_to_s3(self, weather_data, city):
"""Save weather data to S3 bucket"""
if not weather_data:
return False
timestamp = datetime.now().strftime('%Y%m%d-%H%M%S')
file_name = f"weather-data/{city}-{timestamp}.json"
try:
weather_data['timestamp'] = timestamp
self.s3_client.put_object(
Bucket=self.bucket_name,
Key=file_name,
Body=json.dumps(weather_data),
ContentType='application/json'
)
print(f"Successfully saved data for {city} to S3")
return True
except Exception as e:
print(f"Error saving to S3: {e}")
return False
- Створення веб-інтерфейсу
Я використав Flask для створення простого веб-сервера, що відображає дані про погоду. Інформаційна панель показує список міст із їх погодними даними, що оновлюються в реальному часі.
@app.route('/')
def dashboard():
# List files in S3
files = list_files_in_bucket()
# Fetch the latest file (assuming files are timestamped)
if not files:
return "No weather data found in S3 bucket."
# Fetch weather data for all files
weather_data_list = []
for file in files:
weather_data = fetch_weather_data(file)
if weather_data:
data = {
"city": weather_data.get("name"),
"temperature": weather_data["main"]["temp"],
"humidity": weather_data["main"]["humidity"],
"description": weather_data["weather"][0]["description"],
"timestamp": weather_data["timestamp"]
}
weather_data_list.append(data)
if weather_data_list:
return render_template('dashboard.html', data=weather_data_list)
return "Error loading weather data."
if __name__ == '__main__':
app.run(debug=True)
Повний код проєкту: https://github.com/brendagold/weather-dashboard
З труднощами, з якими я зіткнувся, і як я їх подолав:
- Обмеження API за кількістю запитів: Спочатку я зіткнувся з проблемою обмеження кількості запитів API. Я вирішив цю проблему, кешуючи дані про погоду в S3 і оновлюючи їх лише раз на годину.
- AWS CLI: Налаштування AWS CLI було складним на початку, але після деяких налаштувань я переконався, що додаток має правильні дозволи.
Висновок:
Інформаційна панель погоди
Цей проєкт був чудовим досвідом навчання, і я пишаюсь тим, як він вийшов. Інтегруючи AWS, Flask і API, я отримав практичний досвід роботи з AWS.
Якщо ви хочете покращити свої навички в хмарних сервісах, роботі з API або розробці бекенду, я настійно рекомендую створити подібний проєкт!
Перекладено з: Building a Weather Dashboard with AWS, Flask, and OpenWeather API