122 lines
3.5 KiB
Ruby
122 lines
3.5 KiB
Ruby
# 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
|