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


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

## PokeAPI とは？
簡単に言うと、ポケモンに関する情報を取得できる API です。（[公式サイト](https://pokeapi.co/)）

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


## 実装
```ruby: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)](https://docs.ruby-lang.org/ja/3.0/class/Kernel.html#M_RAND)
  - 擬似乱数を生成してくれるメソッド。引数には、整数や Range オブジェクトを渡して乱数の上限や範囲を指定する事が可能です。


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

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

### 解説4
- result の中身に関して、以下のようにめちゃくちゃ量が多い。
```json
{
  "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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3144766/c781f874-2b88-8d6f-99a2-abbaa848f155.png)