LoginSignup
1
0

More than 1 year has passed since last update.

🐣【Ruby入門】PokeAPI を使って、最初のポケモンを選んでみた

Posted at

PokeAPI を使って、最初のポケモンを選ぶ機能を実装してみました。

PokeAPI とは?

簡単に言うと、ポケモンに関する情報を取得できる API です。(公式サイト

前段

  • 使用する API は、「https://pokeapi.co/api/v2/pokemon-species/」です。
    • /種族Noを渡すと、該当のポケモンの種族情報を取得できます。
  • ファイルを実行すると、ポケモンがランダムで選ばれて、日本語のポケモンの名前を表示される実装になります。
    • GET リクエストで取得しています。
  • 実装を少なく、機能実現を目指したので、色々考慮出来ていないところは温かい目で、、、🥺

実装

poke_api.rb
# import 設定
require "net/http"
require 'json'

# ポケモン種族 No を範囲指定でランダムで取得(今、1008も居るのね。。)   ・・・ 解説1
pokemon_no = rand(1..1008)

# URL 設定
uri = URI.parse('https://pokeapi.co/api/v2/pokemon-species/' + pokemon_no.to_s)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme === "https" #    ・・・ 解説2

# get リクエスト
response = http.get(uri.path)

# レスポンスを JSON でパースする   ・・・ 解説3
result = JSON.parse(response.body)

# 日本語のポケモンの名前を取得する   ・・・ 解説4
result['names'].each do |name|
  puts '君の最初のポケモンは、「' + name['name'] + '」だ!!!' if name['language']['name'] == 'ja-Hrkt'
  break if name['language']['name'] == 'ja-Hrkt'
end

# ruby poke_api.rb
# => 君の最初のポケモンは、「ブイゼル」だ!!!

解説

解説1

  • rand(1..1008)
    • Kernel#rand(Ruby 3.0)
    • 擬似乱数を生成してくれるメソッド。引数には、整数や Range オブジェクトを渡して乱数の上限や範囲を指定する事が可能です。

解説2

  • http.use_ssl = uri.scheme === "https"
    • 今回、 HTTPS 通信の為 use_ssl を true にする必要があります。

解説3

  • JSON.parse(response.body)
    • response.body は文字列なので、ポケモンの名前を探すのが難しい、後続処理で取得しやすいように JSON でパースする。

解説4

  • result の中身に関して、以下のようにめちゃくちゃ量が多い。
{
  "base_happiness": 50,
  "capture_rate": 45,
  "color": {
    "name": "green",
    "url": "https://pokeapi.co/api/v2/pokemon-color/5/"
  },
  .....(省略)
  "hatch_counter": 20,
  "id": 1,
  "is_baby": false,
  "is_legendary": false,
  "is_mythical": false,
  "name": "bulbasaur",
  "names": [
    {
      "language": {
        "name": "ja-Hrkt",
        "url": "https://pokeapi.co/api/v2/language/1/"
      },
      "name": "フシギダネ"
    },
    {
      "language": {
        "name": "roomaji",
        "url": "https://pokeapi.co/api/v2/language/2/"
      },
      "name": "Fushigidane"
    },
    {
      "language": {
        "name": "ko",
        "url": "https://pokeapi.co/api/v2/language/3/"
      },
      "name": "이상해씨"
    },
    {
      "language": {
        "name": "zh-Hant",
        "url": "https://pokeapi.co/api/v2/language/4/"
      },
      "name": "妙蛙種子"
    },
    {
      "language": {
        "name": "fr",
        "url": "https://pokeapi.co/api/v2/language/5/"
      },
      "name": "Bulbizarre"
    },
    {
      "language": {
        "name": "de",
        "url": "https://pokeapi.co/api/v2/language/6/"
      },
      "name": "Bisasam"
    },
    {
      "language": {
        "name": "es",
        "url": "https://pokeapi.co/api/v2/language/7/"
      },
      "name": "Bulbasaur"
    },
    {
      "language": {
        "name": "it",
        "url": "https://pokeapi.co/api/v2/language/8/"
      },
      "name": "Bulbasaur"
    },
    {
      "language": {
        "name": "en",
        "url": "https://pokeapi.co/api/v2/language/9/"
      },
      "name": "Bulbasaur"
    },
    {
      "language": {
        "name": "ja",
        "url": "https://pokeapi.co/api/v2/language/11/"
      },
      "name": "フシギダネ"
    },
    {
      "language": {
        "name": "zh-Hans",
        "url": "https://pokeapi.co/api/v2/language/12/"
      },
      "name": "妙蛙种子"
    }
  ],
  .....(省略)
}
  • 今回欲しい情報は、names の配列の中にある、 language の name の値が ja-Hrkt の時の name になります。
    • なので、 result['names'].each で回して、 if name['language']['name'] == 'ja-Hrkt' に該当したら、名前を表示させるようにしています。
      スクリーンショット 2023-02-19 19.20.00.png
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0