mirror of
https://github.com/chase-manning/pokemon-js.git
synced 2025-11-21 09:00:44 +00:00
✨ add script to get location data
This commit is contained in:
parent
82269e5971
commit
1d9d987c8c
1 changed files with 168 additions and 0 deletions
168
scripts/get-locations.js
Normal file
168
scripts/get-locations.js
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
const pokemon = require("./pokemon.json");
|
||||
const fs = require("fs");
|
||||
|
||||
function getPokemonId(name) {
|
||||
for (let i = 0; i < pokemon.length; i++) {
|
||||
if (pokemon[i].name === name) return i + 1;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
const getEncounterRate = (encounterMethodRates, methodName) => {
|
||||
const rate = encounterMethodRates.find(
|
||||
(method) => method.encounter_method.name === methodName
|
||||
);
|
||||
if (!rate) return 0;
|
||||
const red = rate.version_details.find(
|
||||
(detail) => detail.version.name === "firered"
|
||||
);
|
||||
return red ? red.rate : 0;
|
||||
};
|
||||
|
||||
const getPokemon = (pokemonEncounters, methodName) => {
|
||||
const pokemon = [];
|
||||
|
||||
for (let i = 0; i < pokemonEncounters.length; i++) {
|
||||
const pokemonName = pokemonEncounters[i].pokemon.name;
|
||||
const pokemonId = getPokemonId(pokemonName);
|
||||
if (!pokemonId) continue;
|
||||
const blueData = pokemonEncounters[i].version_details.find(
|
||||
(detail) => detail.version.name === "blue"
|
||||
);
|
||||
if (!blueData) continue;
|
||||
for (let j = 0; j < blueData.encounter_details.length; j++) {
|
||||
const details = blueData.encounter_details[j];
|
||||
const method = details.method.name;
|
||||
if (method === methodName) {
|
||||
const pokemon_ = {
|
||||
id: pokemonId,
|
||||
chance: details.chance,
|
||||
conditionValues: details.condition_values,
|
||||
maxLevel: details.max_level,
|
||||
minLevel: details.min_level,
|
||||
};
|
||||
pokemon.push(pokemon_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pokemon;
|
||||
};
|
||||
|
||||
const downloadData = async () => {
|
||||
const locations = JSON.parse(fs.readFileSync("location-areas.json"));
|
||||
// const locations = [
|
||||
// {
|
||||
// name: "kanto-route-1-area",
|
||||
// url: "https://pokeapi.co/api/v2/location-area/295/",
|
||||
// },
|
||||
// ];
|
||||
|
||||
let output = {};
|
||||
|
||||
for (let i = 0; i < locations.length; i++) {
|
||||
const response = await fetch(locations[i].url);
|
||||
const data = await response.json();
|
||||
|
||||
const rates = data.encounter_method_rates;
|
||||
const pokemonEncounters = data.pokemon_encounters;
|
||||
|
||||
const location = {
|
||||
id: data.name,
|
||||
name: data.names.filter((name) => name.language.name === "en")[0].name,
|
||||
encounters: {
|
||||
walk: {
|
||||
rate: getEncounterRate(rates, "walk"),
|
||||
pokemon: getPokemon(pokemonEncounters, "walk"),
|
||||
},
|
||||
oldRod: {
|
||||
rate: getEncounterRate(rates, "old-rod"),
|
||||
pokemon: getPokemon(pokemonEncounters, "old-rod"),
|
||||
},
|
||||
goodRod: {
|
||||
rate: getEncounterRate(rates, "good-rod"),
|
||||
pokemon: getPokemon(pokemonEncounters, "good-rod"),
|
||||
},
|
||||
superRod: {
|
||||
rate: getEncounterRate(rates, "super-rod"),
|
||||
pokemon: getPokemon(pokemonEncounters, "super-rod"),
|
||||
},
|
||||
surf: {
|
||||
rate: getEncounterRate(rates, "surf"),
|
||||
pokemon: getPokemon(pokemonEncounters, "surf"),
|
||||
},
|
||||
rockSmash: {
|
||||
rate: getEncounterRate(rates, "rock-smash"),
|
||||
pokemon: getPokemon(pokemonEncounters, "rock-smash"),
|
||||
},
|
||||
headbutt: {
|
||||
rate: getEncounterRate(rates, "headbutt"),
|
||||
pokemon: getPokemon(pokemonEncounters, "headbutt"),
|
||||
},
|
||||
darkGrass: {
|
||||
rate: getEncounterRate(rates, "dark-grass"),
|
||||
pokemon: getPokemon(pokemonEncounters, "dark-grass"),
|
||||
},
|
||||
grassSpots: {
|
||||
rate: getEncounterRate(rates, "grass-spots"),
|
||||
pokemon: getPokemon(pokemonEncounters, "grass-spots"),
|
||||
},
|
||||
caveSpots: {
|
||||
rate: getEncounterRate(rates, "cave-spots"),
|
||||
pokemon: getPokemon(pokemonEncounters, "cave-spots"),
|
||||
},
|
||||
bridgeSpots: {
|
||||
rate: getEncounterRate(rates, "bridge-spots"),
|
||||
pokemon: getPokemon(pokemonEncounters, "bridge-spots"),
|
||||
},
|
||||
superRodSpots: {
|
||||
rate: getEncounterRate(rates, "super-rod-spots"),
|
||||
pokemon: getPokemon(pokemonEncounters, "super-rod-spots"),
|
||||
},
|
||||
surfSpots: {
|
||||
rate: getEncounterRate(rates, "surf-spots"),
|
||||
pokemon: getPokemon(pokemonEncounters, "surf-spots"),
|
||||
},
|
||||
yellowFlowers: {
|
||||
rate: getEncounterRate(rates, "yellow-flowers"),
|
||||
pokemon: getPokemon(pokemonEncounters, "yellow-flowers"),
|
||||
},
|
||||
purpleFlowers: {
|
||||
rate: getEncounterRate(rates, "purple-flowers"),
|
||||
pokemon: getPokemon(pokemonEncounters, "purple-flowers"),
|
||||
},
|
||||
redFlowers: {
|
||||
rate: getEncounterRate(rates, "red-flowers"),
|
||||
pokemon: getPokemon(pokemonEncounters, "red-flowers"),
|
||||
},
|
||||
roughTerrain: {
|
||||
rate: getEncounterRate(rates, "rough-terrain"),
|
||||
pokemon: getPokemon(pokemonEncounters, "rough-terrain"),
|
||||
},
|
||||
gift: {
|
||||
rate: getEncounterRate(rates, "gift"),
|
||||
pokemon: getPokemon(pokemonEncounters, "gift"),
|
||||
},
|
||||
giftEgg: {
|
||||
rate: getEncounterRate(rates, "gift-egg"),
|
||||
pokemon: getPokemon(pokemonEncounters, "gift-egg"),
|
||||
},
|
||||
onlyOne: {
|
||||
rate: getEncounterRate(rates, "only-one"),
|
||||
pokemon: getPokemon(pokemonEncounters, "only-one"),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
output[data.name] = location;
|
||||
|
||||
console.log(`Downloaded ${location.name}`);
|
||||
|
||||
// wait one second
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
}
|
||||
|
||||
fs.writeFileSync("data.json", JSON.stringify(output));
|
||||
};
|
||||
|
||||
downloadData();
|
||||
Loading…
Add table
Add a link
Reference in a new issue