Будівництво інформаційної панелі погоди за допомогою AWS, Flask та OpenWeather API

Привіт, розробники,

У цьому пості я проведу вас через процес створення додатку для інформаційної панелі погоди з нуля. Додаток отримує дані про погоду в реальному часі для кількох міст, зберігає їх у AWS S3 та динамічно відображає на веб-інтерфейсі за допомогою Flask.

Незалежно від того, чи ви початківець, чи розробник середнього рівня, цей проєкт — чудовий спосіб навчитися інтеграції API, роботі з хмарним сховищем та створенню функціональних веб-додатків.

Чому я створив це

Цей проєкт є частиною #DevOpsAllStarsChallenge. Я приєднався до цього челенджу, щоб отримати практичний досвід роботи з AWS.

Опис проєкту

pic

Проста схема архітектури для інформаційної панелі погоди

Поетапний процес розробки

  1. Налаштування 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()
  1. Зберігання даних у 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
  1. Створення веб-інтерфейсу

Я використав 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 було складним на початку, але після деяких налаштувань я переконався, що додаток має правильні дозволи.

Висновок:

pic

Інформаційна панель погоди

Цей проєкт був чудовим досвідом навчання, і я пишаюсь тим, як він вийшов. Інтегруючи AWS, Flask і API, я отримав практичний досвід роботи з AWS.
Якщо ви хочете покращити свої навички в хмарних сервісах, роботі з API або розробці бекенду, я настійно рекомендую створити подібний проєкт!

Перекладено з: Building a Weather Dashboard with AWS, Flask, and OpenWeather API

Leave a Reply

Your email address will not be published. Required fields are marked *