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": "妙蛙种子"
}
],
.....(省略)
}