Göm meny

Kort om PokeAPI

Sidor att vara bekant med innan du läser denna sida

Introduktion

PokeAPI (https://pokeapi.co/) är en öppen webbtjänst som man kan få tag på information om Pokémon via ett webb-API. För att inte belasta deras servrar, finns API:et tillgängligt via kurshemsidan. I denna laboration ska du alltså inte använda den officiella URL:en

Den officiella dokumentationen hittar du här: https://pokeapi.co/

Hur är informationen strukturerad i PokeAPI?

PokeAPI tillhandahåller information som vi hämtar via specifika URL:er. Data fås i JSON format.

Datatyperna i JSON-data (se JSON) har motsvarigheter i Python. För att minska förvirringen kommer skull kommer texten i fortsättningen referera till datatypen objekt i JSON-data som dictionary och datatypen array i JSON-data som lista.

Med hjälp av modulen requestskan vi parsa JSON-data och få det lagrat som ett dictionary (se lektion 3).

Massor av information finns tillgängligt via PokeAPI, men i laboration 3 ligger fokus nedanstående två strukturer:

  • pokemon
  • ability

URL:er att använda

Nedan hittar du de URL:er som behöver användas i den obligatoriska delen av laboration 3.

Lista över pokémons

  • https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/

Lista med de pokémons som finns i PokeAPI. I listan hittar namn och URL till information om pokémon med det namnet. Läs mer nedan under rubriken Hitta URL till Pokémon som man vet namnet på.

Information om specifik pokémon

  • https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/<heltal>/

Byt ut <heltal> i URL:en ovan mot ett heltal för att få fram JSON-data för en specifik pokémon, t.ex. https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/ability/25/ Mer om informationsstrukturen för pokémon-data hittar du nedan under rubriken Struktur på pokemon-data.

Information om pokémon-färdigheter

  • https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/ability/<heltal>/

Byt ut <heltal> i URL:en ovan mot ett heltal för att få fram JSON-data för en specifik förmåga, t.ex. https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/ability/150/. Mer om ability-datas hittar du nedan under rubriken Struktur på abililty-data

Hitta URL till Pokémon som man vet namnet på

En URL till JSON-data om en viss Pokemon ser ut enligt nedan.

https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/42/

Där 42 i det här fallet är Pokemon:ens id-nummer. Hur gör man för gå från Pokemon-namn till den URL:en? Jo, om man tittar på

https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/

så hittar man en lista med alla namn och vilken URL som ska användas. Den har dock följande utseende:

{
    "count": 964,
    "next": null,
    "previous": null,
    "results": [
        {
            "name": "bulbasaur",
            "url": "/api/v2/pokemon/1/"
        },
        {
            "name": "ivysaur",
            "url": "/api/v2/pokemon/2/"
        },
        {
            "name": "venusaur",
            "url": "/api/v2/pokemon/3/"
        },
        ...
}

så, för att hitta rätt URL behöver man gå igenom listan med dictionaries som ligger under nyckeln "results".

OBS! Både stavning och användning av stora/små bokstäver är betydelsebärande när det kommer till att använda strängar som nycklar i ett dictionary. Om du får ett KeyError, dubbelkolla din stavning!

De URL:er som finns i listan består bara av själva sökvägs-delen. Det betyder att för t.ex. "venusaur" så blir den fullständiga URL:en https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/3/

Anmärkning Via det officiella PokeAPI:et kan man även skriva in namnet på en pokemon direkt i URL:en. Stöd för detta finns dock inte i den speglade versionen som vi använder oss av i kursen. Dvs.

Med det officiella API:et kan man både skriva https://pokeapi.co/api/v2/pokemon/bulbasaur och https://pokeapi.co/api/v2/pokemon/1 för att få fram information om “bulbasaur”, men med för den speglade versionen vi har på IDA fungerar endast https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/1/

https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/bulbasaur/ fungerar alltså inte.

Struktur på pokemon-data

När vi har data för en pokemon, som ett dictionary, kommer det dictionaryt ha nycklar enligt den första kolumnen i tabellen nedan. Värdet som tillhör varje nyckel kan i sin tur antingen vara ett enkelt värde, en lista, eller ett dictionary.

Är värdet en lista eller ett dictionery kan de i sin tur innahålla värden som är antingen enkla värden, listor eller dictionaries, osv. Det vi är mest intresserade av i Laboration 3, Del 2 är nyckeln abilities.

  • Länk till JSON-data för en Pokemon.

    Prova gärna att använda JSON Viewer för att lättare få en överblick över strukturen (se nedan). Vissa webbläsare visar också automatiskt ett grafiskt gränssnitt som kan användas för att utforska JSON-data. Det brukar i så fall också finnas en knapp (“Raw Data” i Firefox) för att visa hur datat ser ut egentligen.

Du kan läsa mer i PokeAPI-dokumentationen.

Struktur på ability-data

Motsvarande tabell för en ability se ni nedan.

  • Länk till JSON-data för en ability.

    Prova gärna att använda JSON Viewer för att lättare få en överblick över strukturen (se nedan). I Laboration 3, Del 2 är det informationen under nyckeln flavor_text_entries som är intressant.

Du kan läsa mer i PokeAPI-dokumentationen.

Texter/namn på olika språk

Texter och namn finns på olika språk i PokeAPI datat. På grund av att informationen är strukturerad kan det vara lite svårt att tyda strukturen för all information.

Nedan har vi information om en ability (imposter):

{
    "effect_changes": [],
    "effect_entries": [ ... ],
    "flavor_text_entries": [ ... ],
    "generation": { ... },
    "id": 150,
    "is_main_series": true,
    "name": "imposter",
    "names": [ ... ],
    "pokemon": [ ... ]
}

Attributen flavor_text_entries och names finns på olika språk. Därför ser t.ex. listan med names ut enligt nedan, där varje element i listan är namn på ett specifikt språk.

"names": [
        namn_på_språk_1,
        namn_på_språk_2,
        namn_på_språk_3
    ]

Varje namn_på_språk_X är i sin tur ett dictionary som innehåller själva namnet och språket.

"names": [
        {
            "language": { ... },
            "name": "\u53d8\u8eab\u8005"
        },
        {
            "language": { ... },
            "name": "\u304b\u308f\u308a\u3082\u306e"
        },
        {
            "language": { ... },
            "name": "Imposter"
        },
        {
            "language": { ... },
            "name": "Sosia"
        },
        ...
    ]

… och så är varje språk också ett dictionary med namnet på språket samt en URL för språket.

"names": [
        {
            "language": {
                "name": "zh-Hans",
                "url": "/api/v2/language/12/"
            },
            "name": "\u53d8\u8eab\u8005"
        },
        ...
    ]

Enklare utforskning av JSON-data

Ibland kan det vara väldigt mycket text att orientera sig i när man har JSON-data. Webbplatsen JSON Viewer (https://codebeautify.org/jsonviewer) kan användas för att göra det lättare att titta på JSON-data eftersom den tillhandahåller ett gränssnitt där man kan fälla ut och fälla in olika delar av datat. Man kan fälla ihop delar både i textvyn på vänster sida och i trädvyn på höger sida.

För att titta på data från t.ex. https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/pokemon/104/, så trycker man på knappen “Load Url”, klistrar in den URL man vill titta på och sen på “Load”.

OBS! I trädvyn finns siffror lite här och där som visar antingen index för list-element eller hur många element som finns t.ex. ett dictionary eller i en lista. Dessa siffror finns endast i gränssnittet, inte i själva JSON-datat.

Se även


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2021-02-10