Înapoi la blog
#python#api#meteo#proiect

Aplicație meteo simplă pentru începători

Învață cum funcționează un API și construiește în Python o aplicație care îți spune vremea într-un oraș, folosind biblioteca requests. Cod complet și explicat.

De unde știe telefonul tău ce vreme e afară? Întreabă un API — un serviciu de pe internet care răspunde cu date. Hai să construim și noi o aplicație Python care întreabă un API de vreme și ne spune temperatura dintr-un oraș. E primul tău pas spre programe care „vorbesc" cu internetul.

Ce este un API?

Un API (Application Programming Interface) e ca un chelner: tu îi spui ce vrei (vremea în Cluj), el merge la „bucătărie" (serverul) și îți aduce răspunsul, de obicei în format JSON — un text structurat ușor de citit de programe.

Pentru a vorbi cu un API din Python folosim biblioteca requests. O instalezi o singură dată:

# în terminal:
# pip install requests
import requests

Cum arată o cerere

Multe API-uri de vreme (de exemplu OpenWeatherMap sau Open-Meteo) funcționează la fel: trimiți o adresă cu niște parametri, primești JSON. Iată structura generală.

import requests

url = "https://api.exemplu-meteo.ro/vreme"
parametri = {
    "oras": "Cluj-Napoca",
    "unitate": "celsius",
}

raspuns = requests.get(url, params=parametri)
date = raspuns.json()

requests.get trimite cererea, iar .json() transformă răspunsul într-un dicționar Python cu care putem lucra ușor.

Citim datele din răspuns

Răspunsul JSON e un dicționar. Presupunem că arată cam așa:

date = {
    "oras": "Cluj-Napoca",
    "temperatura": 21,
    "descriere": "parțial înnorat",
    "vant_kmh": 12,
}

print(f"Vremea în {date['oras']}:")
print(f"  Temperatură: {date['temperatura']}°C")
print(f"  Cer: {date['descriere']}")
print(f"  Vânt: {date['vant_kmh']} km/h")

Accesăm fiecare valoare cu cheia ei: date['temperatura'] ne dă numărul 21. Aceasta e logica oricărei aplicații care folosește un API.

Punem totul într-o funcție

E mai curat să împachetăm logica într-o funcție care primește orașul și întoarce vremea.

import requests

def vremea(oras):
    url = "https://api.exemplu-meteo.ro/vreme"
    raspuns = requests.get(url, params={"oras": oras})
    if raspuns.status_code != 200:
        return None
    return raspuns.json()

date = vremea("Iași")
if date:
    print(f"{date['oras']}: {date['temperatura']}°C")
else:
    print("Nu am găsit vremea pentru orașul cerut.")

status_code ne spune dacă cererea a reușit. Codul 200 înseamnă „OK"; altceva (de exemplu 404) înseamnă că ceva n-a mers — poate orașul e scris greșit.

Important: API-urile reale cer de obicei o cheie (API key) personală, gratuită la înregistrare. Nu o pune niciodată public pe GitHub — o ții într-o variabilă de mediu sau într-un fișier separat.

Erori frecvente și cum le eviți

ProblemăCauzăSoluție
ModuleNotFoundErrorrequests neinstalatpip install requests
Cod 401cheie API lipsă/greșităverifică cheia
KeyErrorcheie inexistentă în JSONafișează date și verifică structura

Un truc util când nu știi cum arată răspunsul: pur și simplu print(date) ca să vezi toate cheile disponibile.

Vremea pentru mai multe orașe

Aceeași funcție poate fi chemată într-o buclă, ca să compari mai multe orașe deodată.

orase = ["Cluj-Napoca", "București", "Constanța"]

for oras in orase:
    date = vremea(oras)
    if date:
        print(f"{date['oras']}: {date['temperatura']}°C")
    else:
        print(f"{oras}: indisponibil")

Frumusețea funcțiilor e exact asta: scrii logica o singură dată și o refolosești de câte ori vrei, fără să copiezi cod.

Un sfat despre vreme și haine

Putem adăuga și un strop de logică „inteligentă" — un mesaj în funcție de temperatură.

def recomandare(temperatura):
    if temperatura < 5:
        return "Îmbracă-te gros, e frig!"
    elif temperatura < 18:
        return "O geacă subțire e perfectă."
    else:
        return "Vreme bună, lasă geaca acasă."

print(recomandare(21))  # Vreme bună, lasă geaca acasă.

elif (prescurtare de la „else if") verifică o a doua condiție doar dacă prima a fost falsă. Așa construiești o scară de decizii curată, fără if-uri imbricate.

Idei de extindere

  • Citește orașul de la utilizator cu input.
  • Afișează vremea pentru mai multe orașe într-o buclă.
  • Salvează temperaturile într-un fișier ca să faci un mic istoric.
  • Adaugă un mesaj cu emoji în funcție de cer (soare, ploaie, nori).

Concluzie

Ai învățat cea mai importantă abilitate din programarea modernă: să iei date de pe internet și să le folosești. Aproape orice aplicație serioasă face exact asta — vorbește cu API-uri.

La ByteSchool îți arătăm cum se lucrează cu API-uri reale, pas cu pas, alături de mentori din Big Tech care construiesc zilnic servicii folosite de milioane de oameni.