Flatiron CLI 프로젝트 - PokeDex

7406 단어 apiflatironcli
지난 한 달 동안 저는 Flatiron Schools 소프트웨어 엔지니어링 과정에 참석했습니다. 우리는 Ruby를 배워왔고 1단계를 마무리하기 위해 API를 사용하여 CLI를 구축해야 했습니다. 원래 나는 선택한 통화의 현재 가치뿐만 아니라 그날의 최고 및 최저 가격을 보여주는 암호화 통화 추적기를 만들려고 생각했지만 많은 API가 몇 시간 뒤쳐져 최신 상태가 아니라는 문제에 부딪쳤습니다. 결국 나는 Poke API을 사용하여 1세대의 원래 151개 포켓몬의 pokeex를 만들기로 결정했습니다. 프로젝트가 시간이 좀 걸렸지만, 전체적으로 어려운 프로젝트여서가 아니라, 시행착오를 통해 적절한 정보 출력을 얻기 위한 방법과 함께 잘 작동할 API를 찾는 데 대부분의 시간을 들였습니다.

    def self.fetch_pokemon
        url = "https://pokeapi.co/api/v2/pokemon?limit=151"
        response = HTTParty.get(url)
        fetch_abilities(response["results"])
    end

HTTParty는 루비gem로 외부 정보에 액세스하고 이를 자동으로 배열 또는 해시로 구문 분석할 수 있습니다. 이 예에서는 pokeapi의 URL을 가져와 response 변수로 구문 분석했습니다. 거기에서 해시를 더 깊이 파고들어 results 어레이에 저장된 액세스 권한을 얻고자 하는 어레이와 별개가 아닌 불필요한 데이터를 제거할 수 있었습니다.

pry(POKE::API)> response
=> {"count"=>1118,
 "next"=>"https://pokeapi.co/api/v2/pokemon?offset=10&limit=10",
 "previous"=>nil,
 "results"=>
  [{"name"=>"bulbasaur", "url"=>"https://pokeapi.co/api/v2/pokemon/1/"},
   {"name"=>"ivysaur", "url"=>"https://pokeapi.co/api/v2/pokemon/2/"},
   {"name"=>"venusaur", "url"=>"https://pokeapi.co/api/v2/pokemon/3/"},
   {"name"=>"charmander", "url"=>"https://pokeapi.co/api/v2/pokemon/4/"},
   {"name"=>"charmeleon", "url"=>"https://pokeapi.co/api/v2/pokemon/5/"},
   {"name"=>"charizard", "url"=>"https://pokeapi.co/api/v2/pokemon/6/"},
   {"name"=>"squirtle", "url"=>"https://pokeapi.co/api/v2/pokemon/7/"},
   {"name"=>"wartortle", }


위 클립에서 볼 수 있는 데이터를 조작하는 것이 흥미로웠습니다. 각 포켓몬에는 이름이 있고 URL과 함께 이동, 능력, 유형, 게임 모양 등에 액세스할 수 있습니다. 정보에 더 깊이 들어가고 싶었습니다.


이를 위해 코드를 정리하는 새로운 방법을 만들어 보다 쉽게 ​​편집할 수 있을 뿐만 아니라 시각적으로 더 매력적으로 만들 수 있습니다. 이제 포켓몬 객체 생성을 시작할 수 있습니다. 먼저 배열을 반복하고 개별 포켓몬 해시의 각 URL을 구문 분석하고 마지막으로 new를 사용하여 새 포켓몬 개체를 만듭니다.

def self.fetch_abilities(results)
    results.each do |x|
        response = HTTParty.get(x["url"])
        POKE::Pokemon.new(response)
    end
end


이것이 API 클래스의 끝입니다. 여기에서 우리는 Pokemon 클래스를 통해 정보를 가져오고 조작할 수 있으며 마지막으로 CLI 클래스를 만들어 사용자에게 옵션과 정보를 표시할 수 있습니다. Pokemon 클래스를 만드는 동안 send를 사용하여 문제가 발생했습니다. 이 시점에서 프로젝트를 완료하는 것은 이전에 다른 게시물에서 다룬 이 방법을 통해 내 변수를 덮어쓴 이유에 대한 더 깊은 이해를 모으기 위한 것이었습니다. 원하는 경우 자세한 내용을 읽을 수 있습니다.

      puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 
      puts "⣿⣿⣿⣿⣿⡏⠉⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿
            ⣿⣿⣿⣿⣿⣿⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠁⠀⣿
            ⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠙⠿⠿⠿⠻⠿⠿⠟⠿⠛⠉⠀⠀⠀⠀⠀⣸⣿
            ⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣴⣿⣿⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⢰⣹⡆⠀⠀⠀⠀⠀⠀⣭⣷⠀⠀⠀⠸⣿⣿⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠈⠉⠀⠀⠤⠄⠀⠀⠀⠉⠁⠀⠀⠀⠀⢿⣿⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⢾⣿⣷⠀⠀⠀⠀⡠⠤⢄⠀⠀⠀⠠⣿⣿⣷⠀⢸⣿⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⡀⠉⠀⠀⠀⠀⠀⢄⠀⢀⠀⠀⠀⠀⠉⠉⠁⠀⠀⣿⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿
            ⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿"
      puts "~~~~~~~~~~~~~GOOD BYE~~~~~~~~~~~~~"

좋은 웹페이지 즐겨찾기