Як керувати API Open Weather, як справжній профі!

Сьогодні зробимо щось справді класне! Ми зареєструємося для отримання облікового запису Open Weather і використаємо їхній відкритий API для отримання результатів в нашому AWS S3 бакеті. Звучить складно, правда? Але дозвольте провести вас через цей процес, щоб ви могли краще зрозуміти, як все працює, і, можливо, ви захочете дослідити інші API в мережі! Тож давайте почнемо, гаразд?

Інструменти для цього проєкту

  • Обліковий запис AWS
  • VS Code
  • Python
  • Open Weather API
  • Github

Перше, що ми зробимо, це створимо наші каталоги.

pic

Я створив папку, в якій буду зберігати свої проєкти — "Python Projects", а всередині цієї папки ми створимо середовище, де зберігатимемо все й писатимемо наш скрипт. Папка називатиметься “weather-dashboard”. Потім ми створимо підкаталоги “src, tests, data” в цій папці. Далі в папці “src” створимо наші .py файли, а також за допомогою команди “touch” створимо файли requirements і readme, а також .env.

mkdir weather-dashboard  
cd weather-dashboard  
mkdir src tests data  
touch src/ __init__.py src/weather_dashboard.py  
touch requirements.txt Readme.md .env

Після цього ми створимо файл gitignore за допомогою команди “echo”. Файли gitignore потрібні для ігнорування важливих даних, таких як ваші паролі, щоб вони не потрапили у ваші файли при завантаженні на ваш обліковий запис Github. Потім встановимо бібліотеку boto3 та додамо наш запит до файлу requirements.txt.

pic

Тепер ми додамо наш API до .env, а також наш бакет до .env.

echo "AWS_BUCKET_NAME=" >> .env  
echo "OPENWEATHER_API_KEY=" >> .env

pic

Тепер імпортуємо наш код до файлу weatherdashboard.py. Щоб почати працювати з змінними середовища та сервісами AWS в Python, можна імпортувати необхідні модулі. Наприклад, _os і json допомагають управляти файлами та маніпулювати даними, відповідно, а boto3 використовується для взаємодії з сервісами AWS. Модуль request допомагає робити HTTP запити, а random генерує випадкові числа.
datetime дозволяє працювати з датами та часом, а також форматувати їх, а loaddotenv_ з бібліотеки dotenv завантажує змінні середовища з файлу .env, щоб зберігати чутливі дані в безпеці.

import os  
import json  
import boto3  
import requests  
import random  
from datetime import datetime  
from dotenv import load_dotenv  

# Завантажуємо змінні середовища  
load_dotenv()  

class WeatherDashboard:  
 def __init__(self):  
 self.api_key = os.getenv("OPENWEATHER_API_KEY")  
 self.bucket_name = os.getenv("AWS_BUCKET_NAME")   
 self.s3_client = boto3.client('s3')  

# Додаємо випадкові числа для кращого забезпечення доступності назви S3 бакета   
 random_ints = random.randint(100, 300)   
 self.bucket_name = f"{self.bucket_name}-{random_ints}"   

 def create_bucket_if_not_exists(self):  
 """Створюємо S3 бакет, якщо його ще немає"""  
 try:  
 self.s3_client.head_bucket(Bucket=self.bucket_name)  
 print(f"Бакет {self.bucket_name} існує")  
 except:  
 print(f"Створення бакета {self.bucket_name}")  
 try:  
 # Просте створення для us-east-1  
 self.s3_client.create_bucket(Bucket=self.bucket_name)  
 print(f"Успішно створено бакет {self.bucket_name}")  
 except Exception as e:  
 print(f"Помилка при створенні бакета: {e}")  

 def fetch_weather(self, city):  
 """Отримуємо дані про погоду з OpenWeather API"""  
 base_url = "https://api.openweathermap.org/data/2.5/weather?"   
 params = {   
 "q": city,  
 "appid": self.api_key,  
 "units": "imperial"  
 }  

 try:  
 response = requests.get(base_url, params=params)  
 response.raise_for_status()  
 return response.json()  
 except requests.exceptions.RequestException as e:  
 print(f"Помилка при отриманні даних погоди: {e}")  
 return None  

 def save_to_s3(self, weather_data, city):  
 """Зберігаємо дані погоди в S3 бакет"""  
 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"Успішно збережено дані для {city} в S3")  
 return True  
 except Exception as e:  
 print(f"Помилка при збереженні в S3: {e}")  
 return False  

def main():  
 dashboard = WeatherDashboard()  

 # Створюємо бакет, якщо потрібно  
 dashboard.create_bucket_if_not_exists()  

 cities = ["Seattle", "New York", "Philadelphia"]  

 for city in cities:   
 print(f"\nОтримуємо погоду для {city}...")  
 weather_data = dashboard.fetch_weather(city)  
 if weather_data:  
 temp = weather_data['main']['temp']  
 feels_like = weather_data['main']['feels_like']  
 humidity = weather_data['main']['humidity']  
 description = weather_data['weather'][0]['description']  

 print(f"Температура: {temp}°F")  
 print(f"Відчувається як: {feels_like}°F")  
 print(f"Вологість: {humidity}%")  
 print(f"Умови: {description}")  

 # Зберігаємо в S3  
 success = dashboard.save_to_s3(weather_data, city)  
 if success:  
 print(f"Дані погоди для {city} збережено в S3!")  
 else:  
 print(f"Не вдалося отримати дані погоди для {city}")  

if __name__ == "__main__":  
 main()

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

pic

БУМ! МИ ЗРОБИЛИ ЦЕ, ДИТИНКО! ТЕПЕР ВИ ЗНАЄТЕ, ЯК ВИКОРИСТОВУВАТИ ВІДКРИТІ API ДЛЯ РІЗНИХ САЙТІВ! Тепер давайте ще раз перевіримо наш обліковий запис AWS, і ви повинні побачити ці результати у вашому S3 бакеті! Я так пишаюсь вами!

pic

Будь ласка, не соромтеся підписатися на мене для отримання нових уроків та гайдів.
Дякую, що повернулися, сподіваюся побачити вас ще не раз!

Ось посилання на мій репозиторій і мою сторінку

[

GitHub - TechboyBrandon/Weather-Dashboard: Як створити Weather Dashboard

Як створити Weather Dashboard. Сприяйте розвитку TechboyBrandon/Weather-Dashboard, створивши обліковий запис на…

github.com

](https://github.com/TechboyBrandon/Weather-Dashboard/tree/main?source=post_page-----1a7258fdb60e--------------------------------)

[

TechboyBrandon - Огляд

TechboyBrandon має 10 доступних репозиторіїв. Слідуйте за його кодом на GitHub.

github.com

](https://github.com/TechboyBrandon?source=post_page-----1a7258fdb60e--------------------------------)

Перекладено з: How To Operate The Open Weather API Like A Boss!

Leave a Reply

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