Photo by Johannes Plenio on Unsplash
Weerlive API: Python-script om weersgegevens op te halen en te verwerken
In dit artikel leer je hoe je een Python-script maakt dat de Weerlive API aanroept om weersinformatie voor een specifieke locatie op te halen. We zullen het script zo ontwerpen dat het JSON-antwoord van de API wordt omgezet in een Python-dictionary. Daarnaast zullen we Poetry gebruiken voor afhankelijkheidsbeheer en -packaging, en unittests schrijven met de unittest-bibliotheek.
Stap 1: Maak een nieuw project met Poetry
Installeer eerst Poetry als je dat nog niet hebt gedaan:
curl -sSL https://install.python-poetry.org | python -
Maak een nieuw project met de volgende opdracht:
poetry new weerlive-api
Navigeer naar de projectmap:
cd weerlive-api
Voeg het requests
pakket toe aan het project:
poetry add requests
Stap 2: Schrijf het Python-script
Maak een bestand genaamd config.py
en voeg hier je API-key toe:
# config.py
api_key = "jouw_api_key_hier"
Toegang tot de API loopt via een API key, deze kun je hier opvragen.
Maak een nieuw bestand genaamd weerlive_api.py
en voeg de volgende code toe:
# weerlive_api.py
import requests
import json
from config import api_key
def get_weer_data(locatie):
url = f"https://weerlive.nl/api/json-data-10min.php?key={api_key}&locatie={locatie}"
response = requests.get(url)
if response.status_code == 200:
data = json.loads(response.text)
return data
else:
print(f"Fout bij het ophalen van gegevens: {response.status_code}")
return None
if __name__ == "__main__":
locatie = "Amsterdam"
weer_data = get_weer_data(locatie)
if weer_data:
print(weer_data)
Laten we de code in detail bekijken:
We importeren de benodigde modules:
requests
om de API aan te roepen,json
om JSON-gegevens te verwerken enapi_key
uit hetconfig.py
bestand.De
get_weer_data
functie neemt één argument,locatie
, en roept de Weerlive API aan met de opgegeven API-key en locatie. Het controleert de HTTP-statuscode om te zien of het verzoek succesvol was en converteert het JSON-antwoord naar een Python-dictionary als het verzoek slaagt. Als het verzoek mislukt, wordt er een foutbericht geprint enNone
geretourneerd.Het
if __name__ == "__main__":
blok is het startpunt van het script en roept deget_weer_data
functie aan met de gewenste locatie (in dit geval "Amsterdam").
Stap 3: Schrijf unittests
Maak een nieuw bestand genaamd test_weerlive_api.py
in de tests
map en voeg de volgende code toe:
# tests/test_weerlive_api.py
import unittest
from unittest.mock import patch
from weerlive_api import get_weer_data
class TestWeerliveAPI(unittest.TestCase):
@patch("requests.get")
def test_get_weer_data_success(self, mock_get):
# Mock the API response
mock_response = mock_get.return_value
mock_response.status_code = 200
mock_response.text = '{"result": "success"}'
locatie = "Amsterdam"
result = get_weer_data(locatie)
self.assertEqual(result, {"result": "success"})
@patch("requests.get")
def test_get_weer_data_failure(self, mock_get):
# Mock the API response
mock_response = mock_get.return_value
mock_response.status_code = 404
locatie = "OnbekendePlaats"
result = get_weer_data(locatie)
self.assertIsNone(result)
if name == "main":
unittest.main()
In dit bestand hebben we twee unittests gemaakt:
1. test_get_weer_data_success
: Deze test controleert of de get_weer_data
functie correct een Python-dictionary retourneert als de API-aanroep succesvol is. We gebruiken patch
om de requests.get
functie te "mocken" en stellen een gesimuleerde API-respons in.
2. test_get_weer_data_failure
: Deze test controleert of de get_weer_data
functie None
retourneert als de API-aanroep mislukt. We "mocken" opnieuw de requests.get
functie en stellen een gesimuleerde API-respons in met een 404-statuscode. Voer de unittests uit met het volgende commando:
poetry run python -m unittest
Stap 4: Verpak het project met Poetry
Verpak het project met Poetry Update het pyproject.toml
bestand met de juiste metadata voor het project, zoals de naam, auteur en versie. Je kunt ook de afhankelijkheden en eventuele extra bestanden die moeten worden opgenomen in het pakket specificeren. Bijvoorbeeld:
[tool.poetry]
name = "weerlive-api"
version = "0.1.0"
description = "Een eenvoudig Python-script om Weerlive API-data op te halen en te verwerken"
authors = ["Jouw Naam <jouw.email@example.com>"]
license = "MIT"
[tool.poetry.dependencies]
python = "^3.7"
requests = "^2.25"
[tool.poetry.dev-dependencies]
pytest = "^6.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Nu ben je klaar om het project te verpakken en te distribueren met Poetry:
poetry build
Dit zal een .tar.gz
en een .whl
bestand genereren in de dist
map.
Gefeliciteerd! Je hebt nu een Python-script gemaakt om de Weerlive API aan te roepen en de JSON-gegevens te verwerken in een dictionary. Je hebt ook geleerd hoe je Poetry kunt gebruiken voor afhankelijkheidsbeheer en -packaging, en unittests kunt schrijven met de unittest-bibliotheek.