initial commit

This commit is contained in:
2026-10-25 23:19:29 -06:00
commit 5a3e877217
43 changed files with 2780 additions and 0 deletions
@@ -0,0 +1,121 @@
# frozen_string_literal: true
require 'httparty'
require 'json'
require_relative '../../db'
require_relative '../../model/pokemon'
require_relative '../../model/sprite'
require_relative '../../model/version'
require_relative '../../versions'
require_relative '../../client/pokeapi'
INITIAL_GENERATIONS = [
'generation-i',
'generation-ii',
'generation-iii',
'generation-iv',
'generation-v',
'generation-vi',
'generation-vii'
]
Sequel.seed do
def run
client = FO::Client::PokeAPI.new
all_species = client.species
all_species["results"].each_with_index do |s, i|
dex = i+1
unless FO::Model::Pokemon.where(dex: dex).empty?
puts "Dex num #{dex} already in database"
next
end
puts "Working on #{s["name"]} #{dex}"
species = client.species(dex)
varieties = species["varieties"]
.map { |v| v["pokemon"]["url"].match(/\/(\d+)\//)[1] }
.select { |v| !v.nil? }
puts "Found varieties: #{varieties}"
varieties.each do |sub|
pokemon = client.pokemon(sub)
name = pokemon["name"]
types = pokemon["types"].map { |t| t["type"]["name"] }
if types.size < 2
types << nil
end
FO::DB.connection.transaction do
pkmn = FO::Model::Pokemon.create(
name: name,
dex: dex,
types: pokemon["types"].map { |t| t["type"]["name"] }
)
pokemon["sprites"]["versions"].keys.each do |generation|
next unless INITIAL_GENERATIONS.include?(generation)
generation_data = pokemon["sprites"]["versions"][generation]
generation_data.keys.each do |version_group|
puts "Working on generation"
actual_version_group = version_group
if version_group == 'gold' ||
version_group == 'silver'
actual_version_group = 'gold-silver'
end
unless FO::Versions::VERSION_GROUPS_TO_VERSIONS.keys.include?(actual_version_group)
puts "Skipping #{actual_version_group} because its not a valid version group. Pkmn: #{name}"
next
end
versions = FO::Versions::VERSION_GROUPS_TO_VERSIONS[actual_version_group]
next if versions.nil?
puts "Looking at generation:"
puts "Gen: #{generation}"
puts "Data: #{generation_data}"
puts "VG: #{version_group}"
puts "AVG: #{actual_version_group}"
sprite_url = ""
if generation == "generation-i"
sprite_url = generation_data[version_group]["front_default"]
else
if !generation_data[version_group]["animated"].nil?
sprite_url = generation_data[version_group]["animated"]["front_shiny"]
else
sprite_url = generation_data[version_group]["front_shiny"]
end
end
next if sprite_url.nil?
puts "Found sprite (#{sprite_url}) for #{name} for versions: #{versions}"
sprite_blob = HTTParty.get(sprite_url).body
sprite = pkmn.add_sprite(sprite: sprite_blob)
versions.each do |v|
version = FO::Model::Version.find(name: v.to_s)
next if version.nil?
version.add_sprite(sprite)
end
sleep 0.5
end
end
sleep 0.1
end
sleep 0.5
end
end
end
end