Leer simpel met een API werken in Python (Hoofdstadzoeker)

Als je met API’s kan werken in Python, gaat er een wereld voor je open. Ook in vele andere programmeertalen kan je met API’s werken, maar in dit artikel focussen we ons op Python. Met een API kan je allerlei interessante data integreren in je programma. Denk bijvoorbeeld aan het ophalen van een weerbericht, recepten met bepaalde ingrediënten, live voetbal tussenstanden, informatie uit de ruimte enz. Je kan het zo gek niet bedenken, er zijn tegenwoordig vele soorten API’s. In dit artikel gaan we een simpel programma maken in 5 stappen, zodat je heel laagdrempelig leert werken met een API in Python. Van daaruit kan je verder leren. We gaan een hoofdstadzoeker maken die hoofdsteden van landen kan ophalen. Laten we verder gaan!

Weet je eigenlijk nog niet goed wat een API is? Lees dan dit laagdrempelige artikel dat uitlegt wat een API precies is.

Verder gaan we in dit artikel niet diep in op de basisonderdelen van het programmeren. Dus basiskennis van programmeren is wel handig om te hebben.

Heb je nog geen basiskennis? Dan is het e-book “Snelcursus Leren Programmeren” een aanrader om door te nemen.

Video

Er staat ook een video online op YouTube om de hoofdstadzoeker te maken. Je kan de video gelijk kijken als je wil:

REST Countries API

In het programma dat we gaan maken, gaan we gebruik maken van de REST Countries API. Deze API kan je gratis gebruiken en je hebt ook geen API key nodig.

Op deze manier houden we het zo laagdrempelig mogelijk. Niemand wil gelijk veel te ver de diepte induiken, het niet goed snappen en snel weer afhaken.

JSONView Chrome-extensie

Wij gaan een request (Verzoek) sturen naar de API om de juiste data op te halen. Dit doen we met een endpoint, een url waarin we specifiek ons verzoek kunnen sturen.

Deze url kan je gewoon in een Google Chrome invullen en dan krijg je JSON data te zien in de browser. Deze JSON data heeft de API teruggestuurd, naar aanleiding van onze request.

Echter is het dan lastig uit te lezen. De JSON data is niet netjes opgemaakt. Download de Chrome-extensie JSONView, dan wordt de JSON data automatisch netjes opgemaakt.

Op die manier kan je makkelijker zien hoe je de juiste data op moet halen. Daar komen we later op terug.

Stap 1: Python en PyCharm installeren

Degenen die Python en PyCharm al hebben geïnstalleerd, kunnen door naar de volgende stap.

Python installeren op je computer is eenvoudig met dit artikel te doen.

Een van de beste ontwikkelomgevingen voor Python, PyCharm, kan je met dit artikel eenvoudig installeren en je maakt ook gelijk je eerste programma om erin te komen.

Klaar? Ga dan naar de volgende stap!

Stap 2: Nieuw project aanmaken in PyCharm

Een nieuw project aanmaken in PyCharm is geen raketwetenschap, maar je moet wel even weten hoe het moet.

Ben je al bekend met PyCharm, dan kan je ook deze stap overslaan en gelijk doorgaan naar de volgende stap.

Als je linksboven in PyCharm klikt op File > New Project…, dan kan je een nieuw project aanmaken.

Ik noem het nieuwe project “hoofdstadzoeker”. Daarna maak ik een Python bestand en noem dat “hoofdstadzoeker.py”.

Lees dit artikel terug als je vergeten bent hoe je een Python bestand aanmaakt in PyCharm.

Gelukt? Laten we verder gaan!

Stap 3: Installeer requests package

We hebben de requests package nodig om een GET request te sturen naar de API en de data te ontvangen.

In PyCharm zelf kan je eenvoudig packages installeren. Hier lees je hoe je pygame installeert in PyCharm.

Pygame is ook een package. De requests package kan je op dezelfde manier installeren. Pygame hebben we nu niet nodig, alleen de requests package.

In plaats van Project Interpreter, kan er ook Python Interpreter staan. Als er Python Interpreter staat, klik je daarop:

Kijk in de lijst met packages of “requests” ertussen staat. Zo niet, dan installeer je de requests package.

Na installatie importeer je de package in je project. Dat is dan gelijk de eerste regel code. Dat ziet er zo uit:

import requests

Stap 4: Function maken met GET request en checks

Nu gaat het eigenlijk pas echt beginnen. Nu gaan we eindelijk echte code schrijven. Laten we gelijk met de deur in huis vallen en de function maken.

In de function stellen we alvast een endpoint op, die de naam meekrijgt van het land dat de gebruiker invoert.

Ook sturen we een GET request en we ontvangen de data in response:

def zoek_hoofdstad_land(land):
    # Voeg naam land toe in endpoint, stuur GET request en haal data op
    url = f'https://restcountries.com/v3.1/name/{land}'
    response = requests.get(url)

De function kan je onder de eerste regel zetten, waar de requests package wordt geïmporteerd.

Dan gaan we als eerste controleren of de GET request succesvol is verlopen en je statuscode 200 krijgt.

Als de GET request succesvol is verlopen, dan zetten we de JSON data om naar een Python dictionary. Op deze manier kan je de data makkelijk uitlezen in Python.

Dan ziet de function er zo uit:

def zoek_hoofdstad_land(land):
    # Voeg naam land toe in endpoint, stuur GET request en haal data op
    url = f'https://restcountries.com/v3.1/name/{land}'
    response = requests.get(url)

    # Controleren of GET request succesvol is verlopen
    if response.status_code == 200:
        # JSON data omzetten naar Python dictionary
        data = response.json()

Binnen deze check doen we nog een check. We gaan controleren of de data bestaat en de data uit een lijst bestaat.

De REST Countries API geeft namelijk een lijst met landen terug na een verzoek, ook al staat er maar één land in de lijst.

Als de data bestaat en het bestaat uit een lijst, dan halen we de data van het eerste land in de lijst op. Daarna kunnen we de hoofdstad van dit eerste land ophalen.

Heb je de Chrome-extensie JSONView geïnstalleerd? Dan kan je de endpoint in de browser testen en zien hoe de JSON data eruit ziet. Zo kan je het makkelijker uitlezen.

Test bijvoorbeeld deze endpoint in de browser: https://restcountries.com/v3.1/name/germany

Je ziet dat je “capital” moet ophalen om de hoofdstad te krijgen. “capital” bestaat uit een lijst met maar één hoofdstad, dus de eerste waarde uit de lijst moet je ophalen. Hier op ProgrammeerPlaats lees je meer over JSON.

In een print statement wordt de hoofdstad weergeven van het land dat de gebruiker heeft ingevoerd, als alles goed gaat.

Gaat het niet goed? Dan geven we foutmeldingen als er geen land wordt gevonden of er is een fout opgetreden bij het ophalen van de data.

De totale code ziet er dan zo uit tot nu toe:

import requests

def zoek_hoofdstad_land(land):
    # Voeg naam land toe in endpoint, stuur GET request en haal data op
    url = f'https://restcountries.com/v3.1/name/{land}'
    response = requests.get(url)

    # Controleren of GET request succesvol is verlopen
    if response.status_code == 200:
        # JSON data omzetten naar Python dictionary
        data = response.json()
        # Controleren of data bestaat en data bestaat uit een lijst
        if data and isinstance(data, list):
            # Data van eerste land in lijst ophalen
            eerste_land = data[0]
            # Hoofdstad van eerste land ophalen uit lijst van "capital"
            hoofdstad = eerste_land.get('capital')[0]
            print(f"De hoofdstad van {land} is {hoofdstad}.")
        else:
            print("Geen land gevonden")
    else:
        print("Er is een fout opgetreden bij het ophalen van de data")

Stap 5: Input vragen aan gebruiker en function uitvoeren

We zijn er bijna! We moeten natuurlijk nog input aan de gebruiker vragen. Van welk land wil de gebruiker de hoofdstad weten?

Dat vragen we op deze manier:

# Gebruiker naam land laten invullen (Engels)
land_naam = input("Vul de naam van een land in: ")

De gebruiker moet het land wel in het Engels invullen, anders kan er geen hoofdstad gevonden worden.

Tot slot voeren we de function uit en geven we het land mee dat de gebruiker heeft ingevoerd:

# Function uitvoeren met waarde van ingevuld land van gebruiker
zoek_hoofdstad_land(land_naam)

De totale code ziet er nu zo uit:

import requests

def zoek_hoofdstad_land(land):
    # Voeg naam land toe in endpoint, stuur GET request en haal data op
    url = f'https://restcountries.com/v3.1/name/{land}'
    response = requests.get(url)

    # Controleren of GET request succesvol is verlopen
    if response.status_code == 200:
        # JSON data omzetten naar Python dictionary
        data = response.json()
        # Controleren of data bestaat en data bestaat uit een lijst
        if data and isinstance(data, list):
            # Data van eerste land in lijst ophalen
            eerste_land = data[0]
            # Hoofdstad van eerste land ophalen uit lijst van "capital"
            hoofdstad = eerste_land.get('capital')[0]
            print(f"De hoofdstad van {land} is {hoofdstad}.")
        else:
            print("Geen land gevonden")
    else:
        print("Er is een fout opgetreden bij het ophalen van de data")

# Gebruiker naam land laten invullen (Engels)
land_naam = input("Vul de naam van een land in: ")

# Function uitvoeren met waarde van ingevuld land van gebruiker
zoek_hoofdstad_land(land_naam)

Voer het programma uit en test eens of het werkt. Werkt het niet? Loop dan het artikel nog eens na om te kijken waar het mis is gegaan.

Werkt het? Dat is gaaf! Belangrijk is ook dat je snapt wat we gedaan hebben, zodat je eventueel verder met deze hoofdstadzoeker kan gaan en/of met andere API’s.

Verder met deze hoofdstadzoeker en/of andere API’s induiken met Python

Wil je verder gaan met deze hoofdstadzoeker? Hier enkele ideeën om inspiratie op te doen:

  • Gebruiker meerdere landen laten invoeren en van die landen hoofdstad weergeven
  • Nog betere foutmeldingen geven, zoals gebruiker suggestie geven van een land bij verkeerde spelling
  • Hoofdstadquiz maken
  • Op kaart gebruiker land laten aanklikken en hoofdstad weergeven
  • Meer informatie over ingevuld land weergeven, zoals munteenheid, vlag, taal enz.

En zo kan je nog wel doorgaan. Er zijn veel interessante mogelijkheden met deze API.

Natuurlijk zijn er veel meer interessante API’s. Als je bijvoorbeeld op Google zoekt naar “best apis”, dan kom je veel interessante API’s tegen waarmee je kan gaan stoeien.

Probeer zeker andere API’s eens uit. Is je kennis van Python nog niet voldoende? Bekijk dan de beste Python leermethodes om ermee aan de slag te gaan.

Heb je vragen over deze hoofdstadzoeker en/of over werken met API’s in Python? Laat dan zeker hieronder een reactie achter.

Je kan ook contact opnemen.

Ga lekker verder aan de slag met API’s en Python!

Plaats een reactie