【Ruby】APIを利用してJSONを取得する方法

本記事はこんな方のために書いています。

  • 「APIを叩く」イメージを知りたい方
  • Web上のデータを取得する方法を知りたい方
  • JSONの扱いを知りたい方

Web上にあるJSONデータをRubyを使い取得する方法を解説していきます。この記事を読んでいただければ、エンジニアの人がよく使う「APIを叩く」のイメージが広がるのではと思います。

ファイル・ディレクトリを準備しよう

まずは必要なディレクトリやファイルを作成していきます。

好きな場所に、「api_sample」というディレクトリを作成&その配下に「api.rb」という空ファイルを作成してください。

「api.rb」の中に、Web上のデータを取得するためのコードを書いていきます。
今回はJSON placeholderというWebサイトから、サンプルのJSONデータを取得していきます。

APIを叩くコードを書いてみよう

次に「api.rb」ファイルに下記コードを貼り付けてください。

require 'uri'
require 'net/http'
require 'json'

Uri = 'https://jsonplaceholder.typicode.com/users'

# JSON形式で取得
results_json = Net::HTTP.get(URI.parse(Uri))

# JSON形式をRubyで扱えるように変換
results_hash = JSON.parse(results_json)

puts results_hash

Web上のデータをJSONで取得した後、それをRubyで扱うために、「JSON.parse」で配列の形に変換する必要があります。

実際にJSONデータを取得するために、ターミナルで「api_sample」ディレクトリ上で、下記コマンドを実行してください。

ruby api.rb 

//実行結果
{"id"=>1, "name"=>"Leanne Graham", "username"=>"Bret", 
"email"=>"Sincere@april.biz", "address"=>{"street"=>"Kulas Light",
 "suite"=>"Apt. 556", "city"=>"Gwenborough", "zipcode"=>
"92998-3874", "geo"=>{"lat"=>"-37.3159", "lng"=>"81.1496"}}, 
"phone"=>"1-770-736-8031 x56442", "website"=>"hildegard.org", 
"company"=>{"name"=>"Romaguera-Crona", "catchPhrase"=>"Multi-layer
ed client-server neural-net", "bs"=>"harness real-time e-markets"}}
(以下省略...)

実行すると、暗号のようなものが返ってくるはずです。(中身の値はどうでも良いです。)

これはJSON placeholderが提供しているダミーのユーザーデータです。

まずはweb上のJSONデータを取得できるようになりました。

取得したJSONをCSVファイルに書き込む

今度はJSON placeholderから取得したデータを、CSVファイルに格納してExcelなどで扱えるようにしてみましょう。

では、api.rbを開き下記コードを貼り付けます。

require 'uri'
require 'net/http'
require 'json'
# csvモジュールを読み込む
require 'csv'

Uri = 'https://jsonplaceholder.typicode.com/users'

# JSON形式で取得
results_json = Net::HTTP.get(URI.parse(Uri))

# JSON形式をRubyで扱えるように変換
results_hash = JSON.parse(results_json)

# ここから追加してください
CSV.open('userdata.csv', 'w') do |f|
	results_hash.each do |user|
		name = user["name"]
		email = user["email"]
		city = user["address"]["city"]
		f << [name, email, city]
	end
end

results_hashは下記のように、配列になっているので、eachメソッドで中身を取り出すことができます。userには、1つ1つのハッシュが入っているイメージですね。

[
  {"id"=>XX, "name":"XX", .... "address"=>{"street"=>"XX"}..},
  {"id"=>XX, "name":"XX", .... "address"=>{"street"=>"XX"}..},
  {"id"=>XX, "name":"XX", .... "address"=>{"street"=>"XX"}..},
]

それではターミナルで、「ruby api.rb」を実行してください。
同階層に「userdata.csv」ファイルが作成されます。

Leanne Graham,Sincere@april.biz,Gwenborough
Ervin Howell,Shanna@melissa.tv,Wisokyburgh
Clementine Bauch,Nathan@yesenia.net,McKenziehaven
Patricia Lebsack,Julianne.OConner@kory.org,South Elvis
Chelsey Dietrich,Lucio_Hettinger@annie.ca,Roscoeview
Mrs. Dennis Schulist,Karley_Dach@jasper.info,South Christy
Kurtis Weissnat,Telly.Hoeger@billy.biz,Howemouth
Nicholas Runolfsdottir V,Sherwood@rosamond.me,Aliyaview
Glenna Reichert,Chaim_McDermott@dana.io,Bartholomebury
Clementina DuBuque,Rey.Padberg@karina.biz,Lebsackbury

このようにWeb上からJSONデータを取ってきて、管理しやすいようにCSVデータに変換するのはよくあるので、扱えるようになっておきましょう!

RailsでAPIを叩く方法は下記記事を参考にしてくださいね。

【Rails】JSONを返すとは?APIを叩くとは?分かりやすく解説

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です