Python library to fetch weather data from multiple providers
Project description
akvo-weather-info
A Python library to fetch weather data from multiple providers (OpenWeatherMap, WeatherAPI.com).
Installation
pip install akvo-weather-info
For development:
pip install -e .
Configuration
Create a .env file in your project root with API keys:
OPENWEATHER=your_openweathermap_api_key
WEATHERAPI=your_weatherapi_api_key
Get API keys from:
- OpenWeatherMap: https://openweathermap.org/api
- WeatherAPI: https://www.weatherapi.com/
Library Usage
Basic Import
from weather.services import OpenWeatherMapService, WeatherAPIService
# Using OpenWeatherMap
owm = OpenWeatherMapService()
current = owm.get_current("Jakarta")
print(f"Temperature: {current.temperature}C")
print(f"Condition: {current.description}")
# Using WeatherAPI.com
wa = WeatherAPIService()
current = wa.get_current("London")
print(f"Temperature: {current.temperature}C")
Get Forecast
from weather.services import OpenWeatherMapService
service = OpenWeatherMapService()
# Hourly forecast
hourly = service.get_forecast_hourly("Tokyo", hours=24)
for forecast in hourly:
print(f"{forecast.forecast_time}: {forecast.temperature}C")
# Daily forecast
daily = service.get_forecast_daily("New York", days=5)
for forecast in daily:
print(f"{forecast.forecast_time.date()}: {forecast.temperature}C")
Get Raw API Response
from weather.services import WeatherAPIService
service = WeatherAPIService()
# Raw response as dict
raw = service.get_current_raw("Jakarta")
print(raw["current"]["temp_c"])
print(raw["current"]["condition"]["text"])
# Raw forecast
raw_forecast = service.get_forecast_raw("Jakarta")
print(raw_forecast["forecast"]["forecastday"])
Data Models
from weather.models import WeatherData, Forecast
# WeatherData fields
weather.location # str: "Jakarta, ID"
weather.temperature # float: temperature in Celsius
weather.feels_like # float: feels like temperature
weather.humidity # int: humidity percentage
weather.description # str: weather description
weather.wind_speed # float: wind speed in m/s
weather.timestamp # datetime: data timestamp
# Convert to dict
data_dict = weather.to_dict()
Formatters
from weather.services import OpenWeatherMapService
from weather.formatters import format_json, format_text
service = OpenWeatherMapService()
current = service.get_current("Jakarta")
# Format as JSON string
json_output = format_json(current)
# Format as readable text
text_output = format_text(current)
CLI Usage
python -m weather --service=<SERVICE> --location=<LOCATION> [--output=<FORMAT>] [--forecast=<TYPE>] [--raw]
Arguments
| Argument | Required | Values | Description |
|---|---|---|---|
--service |
Yes | owm, wa |
Weather service (owm = OpenWeatherMap, wa = WeatherAPI.com) |
--location |
Yes | string | Location name (e.g., "Jakarta", "London,UK") |
--output |
No | text, json |
Output format (default: text) |
--forecast |
No | hour, day |
Forecast type. If omitted, shows current weather |
--raw |
No | flag | Show raw API response without field mapping |
CLI Examples
# Current weather
python -m weather --service=owm --location="Jakarta"
# JSON output
python -m weather --service=wa --location="London" --output=json
# Hourly forecast
python -m weather --service=wa --location="Tokyo" --forecast=hour
# Daily forecast
python -m weather --service=owm --location="New York" --forecast=day
# Raw API response
python -m weather --service=owm --location="Jakarta" --raw --output=json
Project Structure
weather/
├── __init__.py
├── __main__.py # CLI entry point
├── cli.py # Argument parsing
├── config.py # API key management
├── models.py # Data models (WeatherData, Forecast)
├── services/
│ ├── base.py # Abstract base class
│ ├── openweathermap.py
│ └── weatherapi.py
└── formatters/
├── json_formatter.py
├── text_formatter.py
└── raw_formatter.py
Requirements
- Python >= 3.10
- httpx
- python-dotenv
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file akvo_weather_info-0.1.0.tar.gz.
File metadata
- Download URL: akvo_weather_info-0.1.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f3591ec2c679eebb6ebc58d5935e51249560311188d80dff6a79805432b7a62
|
|
| MD5 |
4d45f4a779f58b2f21a4ac2f753ece1b
|
|
| BLAKE2b-256 |
ca4ece654ed033abea92febee9af99b22b697c6d2b0a64f44ff5a86be53a7f85
|
Provenance
The following attestation bundles were made for akvo_weather_info-0.1.0.tar.gz:
Publisher:
workflow.yml on akvo/weather-info
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
akvo_weather_info-0.1.0.tar.gz -
Subject digest:
9f3591ec2c679eebb6ebc58d5935e51249560311188d80dff6a79805432b7a62 - Sigstore transparency entry: 797928845
- Sigstore integration time:
-
Permalink:
akvo/weather-info@1d7b95a6274f348f28b0e19e2b0237f267e1088c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/akvo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@1d7b95a6274f348f28b0e19e2b0237f267e1088c -
Trigger Event:
push
-
Statement type:
File details
Details for the file akvo_weather_info-0.1.0-py3-none-any.whl.
File metadata
- Download URL: akvo_weather_info-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f1b10fe956bb282174cd58f91c897e03779dd7b5ea29bf6267efbd449d14783
|
|
| MD5 |
a61b57ee40b4d1e38c685addd5f2ba51
|
|
| BLAKE2b-256 |
08d07f6be68502bb3988b18e46cab7bc19aef0bdaac5b96726b1b89775f44627
|
Provenance
The following attestation bundles were made for akvo_weather_info-0.1.0-py3-none-any.whl:
Publisher:
workflow.yml on akvo/weather-info
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
akvo_weather_info-0.1.0-py3-none-any.whl -
Subject digest:
5f1b10fe956bb282174cd58f91c897e03779dd7b5ea29bf6267efbd449d14783 - Sigstore transparency entry: 797928864
- Sigstore integration time:
-
Permalink:
akvo/weather-info@1d7b95a6274f348f28b0e19e2b0237f267e1088c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/akvo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@1d7b95a6274f348f28b0e19e2b0237f267e1088c -
Trigger Event:
push
-
Statement type: