HTTPリクエストでJSONが返ってくるAPIを処理するとかよくあるケースだけど、意外と書き方忘れるのでメモ
require 'net/http'
require 'uri'
require 'json'
uri = URI.parse('http://www.example.com/sample.json')
json = Net::HTTP.get(uri)
result = JSON.parse(json)
puts result
RedirectとかTimeoutとかエラー処理とかちゃんとやりたい時用
require 'net/http'
require 'uri'
require 'json'
def get_json(location, limit = 10)
raise ArgumentError, 'too many HTTP redirects' if limit == 0
uri = URI.parse(location)
begin
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.open_timeout = 5
http.read_timeout = 10
http.get(uri.request_uri)
end
case response
when Net::HTTPSuccess
json = response.body
JSON.parse(json)
when Net::HTTPRedirection
location = response['location']
warn "redirected to #{location}"
get_json(location, limit - 1)
else
puts [uri.to_s, response.value].join(" : ")
# handle error
end
rescue => e
puts [uri.to_s, e.class, e].join(" : ")
# handle error
end
end
puts get_json('http://www.example.com/sample.json')
公式ドキュメント
- http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html
- http://ruby-doc.org/stdlib-2.0/libdoc/uri/rdoc/URI.html
- http://ruby-doc.org/stdlib-2.0/libdoc/json/rdoc/JSON.html