# 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