Programmering nivå 2
Kap 5.3 – Hämta data från API med requests
Anropa externa tjänster och använd JSON-data i dina egna program.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Förstå vad ett API är och hur det används i programmering.
- Kunna använda biblioteket
requestsför att hämta data från ett API. - Kunna läsa, tolka och använda JSON-data från ett API-svar.
- Kunna använda API-data i ett eget program.
Så här lär du dig bäst
Du lär dig bäst genom att först testa ett färdigt exempel som hämtar data från ett öppet API. Börja med att bara skriva ut svaret. Undersök sedan vilken information som finns i datan och hur du kan plocka ut specifika delar. När du förstår det kan du bygga ett eget exempel, till exempel för att skriva ut väder, namn eller skämt. Börja alltid enkelt.
Centrala begrepp
- API - Application Programming Interface, ett gränssnitt för att kommunicera mellan olika program.
- HTTP-förfrågan - En begäran om information som skickas till ett API, till exempel med metoden GET.
- JSON - JavaScript Object Notation, ett textformat som används för att skicka strukturerad data.
- requests - Ett Pythonbibliotek för att skicka HTTP-förfrågningar.
Installera requests
requests ingår normalt inte i Pythons standardbibliotek. Om importen inte fungerar behöver
du installera biblioteket i terminalen:
pip3 install requests
Om du använder flera Python-versioner kan detta behövas i stället:
python3 -m pip install requests
Exempel: Hämta ett skämt från ett API
import requests
url = "https://official-joke-api.appspot.com/random_joke"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print("Skämt:")
print(data["setup"])
print(data["punchline"])
else:
print("Kunde inte hämta skämt. Statuskod:", response.status_code)
requests.get(url) skickar en GET-förfrågan till API:et. Om statuskoden är
200 betyder det att anropet lyckades. Då kan svaret göras om till Pythondata med
response.json().
Att förstå JSON-data
I exemplet ovan innehåller data en ordlista med nycklar och värden:
{
"id": 74,
"type": "general",
"setup": "Why was the stadium so cool?",
"punchline": "Because it was filled with fans!"
}
Du kan använda data["setup"] för att hämta introduktionen till skämtet och
data["punchline"] för poängen.
Robustare variant med try/except
import requests
def hamta_skamt():
url = "https://official-joke-api.appspot.com/random_joke"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
print("\nSkämt:")
print(data["setup"])
print(data["punchline"])
except requests.exceptions.RequestException as e:
print("Kunde inte hämta skämt. Felmeddelande:", e)
if __name__ == "__main__":
hamta_skamt()
raise_for_status() gör att programmet kan fånga HTTP-fel med
try/except. Det är användbart när API:et inte svarar, när nätverket inte fungerar eller
när servern skickar tillbaka en felkod.
Interaktiv övning: simulera ett API-anrop
Testa vad som händer när requests.get(url) får olika typer av svar. Övningen simulerar
ett API-anrop, statuskod, JSON-data och felhantering.
Programmering 2-koppling: övningen visar varför du först
kontrollerar statuskod, sedan tolkar JSON och använder try/except för fel som kan
uppstå utanför ditt eget program.
Öva själv
Övning 1: Kontrollera ett API-svar
Skicka ett GET-anrop till skämt-API:et från kapitlet. Skriv först ut statuskoden. Om den är
200 ska programmet skriva att anropet lyckades, annars ska det visa ett
felmeddelande med statuskoden.
Fundera: Varför bör statuskoden kontrolleras innan JSON-datan används?
När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.
Övning 2: Plocka ut JSON-värden
Hämta ett skämt, omvandla svaret med response.json() och skriv ut värdena från
nycklarna type, setup och punchline. Hantera nätverksfel med
try/except.
Fundera: Vilken Python-datastruktur motsvarar JSON-objektet?
När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.
Övning 3: Sök efter en Pokémon
Fråga användaren efter ett Pokémon-namn och använd det i en URL till PokéAPI. Skriv ut namn,
längd och vikt från JSON-svaret. Visa ett särskilt meddelande vid statuskod 404
och hantera nätverksfel.
Testa: ett namn som finns och ett som saknas.
När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.
Övning 4: Visa hundraser
Hämta listan över alla hundraser från Dog API. JSON-svaret innehåller en dictionary under
nyckeln message. Skriv ut hur många raser som finns och skriv sedan ut varje ras
med en loop. Lägg till statuskontroll, timeout och felhantering.
Fundera: Vad loopar programmet över när det går igenom en dictionary?
När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.
Övning 5: Spara slumpanvändare
Svårare övning: Här kombinerar du API, nästlad JSON, listor, funktioner, filhantering och felhantering.
Hämta tre påhittade användare från Random User Generator. Skriv ut varje persons förnamn,
efternamn och e-postadress. Spara samma uppgifter i anvandare.txt. Programmet ska
hantera statuskoder, nätverksfel och oväntad JSON-data.
Fundera: Vilka delar i JSON-svaret är listor och vilka är dictionaries?
När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.
Övning 6: Skriv ett program som använder ett API
Svårare övning: Här väljer och undersöker du själv ett öppet API.
- Hitta ett öppet API som du kan använda utan registrering.
- Skriv kod som hämtar data från API:et.
- Skriv ut den information som du tycker är mest intressant.
- Lägg till enkel felhantering med statuskoder och
try/except.
När du har försökt själv kan du ladda ner ett lösningsförslag som hämtar aktuellt väder från Open-Meteo: kap5-3-open-meteo-losningsforslag.py på GitHub.
Se även ett mer avancerat exempel på en vädertjänst som din lärare har byggt med HTML, CSS och JavaScript. Tjänsten hämtar väderdata från ett API och visar resultatet på en webbsida.
Bra gratis API:er utan registrering
- Open-Meteo: väderprognoser och aktuellt väder. Ingen API-nyckel krävs för kostnadsfri icke-kommersiell användning inom tjänstens gränser. Dokumentation.
- PokéAPI: data om Pokémon, förmågor och spel. Dokumentationen anger att ingen autentisering krävs. Dokumentation.
- Dog API: hundraser och länkar till hundbilder. Dokumentation.
- Random User Generator: påhittade användaruppgifter för testprogram. Dokumentation.
- Open Library: sökning efter böcker och författare. Passar små utbildningsprojekt, men följ tjänstens anropsgränser och användningsregler. Dokumentation.
Kontrollera alltid dokumentationen innan du börjar. Kostnadsgränser, adresser och villkor kan
ändras. Undvik att skicka många anrop i en loop och lägg alltid till timeout och
felhantering.
Sammanfattning
- Du har lärt dig vad ett API är och hur du använder det i Python.
- Du har testat biblioteket
requestsför att hämta information. - Du har använt JSON-data i ett eget program.
- Du har tränat på att tolka svar från ett externt system och använda det i ditt program.