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
- Använd INTE https://pokeapi.co/api/v2/
- Använd: https://www.ida.liu.se/~TDDE44/pokeapi/api/v2/
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 requests
kan vi parsa JSON-data och få det lagrat som ett
dictionary (se Kort om modulen requests).
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.
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: 2024-07-26