LoginSignup
0
0

More than 1 year has passed since last update.

rubyでHTTPリクエストを行う

Last updated at Posted at 2022-10-30

天気予報を表示させてみたいので必要になった。

参考のサイトでコードが見つかった。

require 'uri'
require 'net/http'

uri = URI('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
res = Net::HTTP.get_response(uri)
puts res.body if res.is_a?(Net::HTTPSuccess)

出典

これはどういう意味を表しているのか調べてみる。

URI()とは?

URI を扱うためのモジュールです。

URI(Uniform Resource Identifier)とは?

情報やデータといったリソースを識別するための記述方法
人や会社、書籍など、あらゆるリソースを示すことができる。
URIのうちリソースの存在する場所を示すものをURL(Uniform Resource Locator)と言い、
場所を問わずにリソースの名前を示すものをURN(Uniform Resource Name)と言います。

URL(Uniform Resource Locator)

リソースの場所を示す情報のほかにリソースを取得する方法が記述されとり、Webサイトの場所を示す際に利用されています。

URN(Uniform Resource Name)

刊行された書籍を一位に特定し識別するためのISBNコードなどを使ってURNを記述できます。

リクエストURI

URIはリクエスト行のメソッドに続いて記述され、リクエストURIとも呼ばれます。
リクエストURIのうち
URI全てを含める絶対URI形式とURIの一部を含める相対URI形式がある。
通常は、記述を簡略化した相対URI形式で記述されます。

多分..

メソッドとはHTTPメソッドのことだと思う。

出典

このメソッドはどういう風に使うのか?

uri = URI('')

実験してみた。

irb(main):294:0> uri = URI("https://www.jma.go.jp/bosai/forecast/data/forecast
/020000.json")
=> #<URI::HTTPS https://www.jma.go.jp/bosai/forecast/data/forecast/020000...
irb(main):295:0> uri.class
=> URI::HTTPS
irb(main):248:0> s = "https://www.jma.go.jp/bosai/forecast/data/forecast/02000
0.json"
=> "https://www.jma.go.jp/bosai/forecast/data/forecast/020000.json"
irb(main):249:0> s.class
=> String

なるほどURI::HTTPSクラスになるのか。

このメソッドはどういう風に使うのか?

res = Net::HTTP.get_response(uri)
irb(main):255:0>   res = Net::HTTP.get_response(uri)
(irb):255:in `<main>': uninitialized constant Net::HTTP (NameError)

  res = Net::HTTP.get_response(uri)
           ^^^^^^

どうやらNet::HTTPを認識できないようだ。
もしかしてrequire 'net/http'が必要なのではないか?

irb(main):266:0> require 'net/http'
=> true
.
.
.
irb(main):268:0> res = Net::HTTP.get_response(uri)
=> #<Net::HTTPOK 200 OK readbody=true>

おぉなった。

出典

irb(main):293:0> res.read_body
=> "{\"publishingOffice\":\"\xE9\x9D\x92\xE6\xA3\xAE\xE5\x9C\xB0\xE6\x96\xB9\xE6\xB0\x97\xE8\xB1\xA1\xE5\x8F\xB0\",\"reportDatetime\":\"2022-10-30T10:31:00+09:00\",\"targetArea\":\"\xE9\x9D\x92\xE6\xA3\xAE\xE7\x9C\x8C\",\"headlineText\":\"\",\"text\":\"\xE5\x8C\x97\xE6\x97\xA5\xE6\x9C\xAC\xE3\x81\xAF\xE6\xB0\x97\xE5\x9C\xA7\xE3\x81\xAE\xE8\xB0\xB7\xE3\x81\xA8\xE3\x81\xAA\xE3\x81\xA3\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x99\xE3\x80\x82\xE4\xB8\x80\xE6\x96\xB9\xE3\x80\x81\xE4\xB8\xAD\xE5\x9B\xBD\xE6\x9D\xB1\xE5\x8C\x97\xE5\x8C\xBA\xE3\x81\xAB\xE9\xAB\x98\xE6\xB0\x97\xE5\x9C\xA7\xE3\x81\x8C\xE3\x81\x82\xE3\x81\xA3\xE3\x81\xA6\xE3\x80\x81\xE6\x9C\xAC\xE5\xB7\x9E\xE4\xBB\x98\xE8\xBF\x91\xE3\x81\xAB\xE5\xBC\xB5\xE3\x82\x8A\xE5\x87\xBA\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x99\xE3\x80\x82\\n\\n\xE9\x9D\x92\xE6\xA3\xAE\xE7\x9C\x8C\xE3\x81\xAF\xE3\x80\x81\xE6\x9B\x87\xE3\x82\x8A\xE3\x82\x84\xE6\x99\xB4\xE3\x82\x8C\xE3\x81\xA7\xE3\x80\x81\xE9\x9B\xA8\xE3\x81\xAE\xE9\x99\x8D\xE3\x81\xA3\xE3\x81\xA6\xE3\x81\x84\xE3\x82\x8B\xE6\x89\x80\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99\xE3\x80\x82\\n\\n\xEF\xBC\x93\xEF\xBC\x90\xE6\x97\xA5\xE3\x81\xAF\xE3\x80\x81\xE6\xB0\x97\xE5\x9C\xA7\xE3\x81\xAE\xE8\xB0\xB7\xE3\x82\x84\xE5\xAF\x92\xE6\xB0\x97\xE3\x81\xAE\xE5\xBD\xB1\xE9\x9F\xBF\xE3\x81\xAB\xE3\x82\x88\xE3\x82\x8A\xE3\x80\x81\xE6\x9B\x87\xE3\x82\x8A\xE3\x82\x84\xE6\x99\xB4\xE3\x82\x8C\xE3\x81\xA7\xE3\x80\x81\xE9\x9B\xA8\xE3\x82\x84\xE9\x9B\xB7\xE9\x9B\xA8\xE3\x81\xAE\xE6\x89\x80\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8B\xE3\x81\xA7\xE3\x81\x97\xE3\x82\x87\xE3\x81\x86\xE3\x80\x82\\n\\n\xEF\xBC\x93\xEF\xBC\x91\xE6\x97\xA5\xE3\x81\xAF\xE3\x80\x81\xE9\xAB\x98\xE6\xB0\x97\xE5\x9C\xA7\xE3\x81\xAB\xE8\xA6\x86\xE3\x82\x8F\xE3\x82\x8C\xE3\x82\x8B\xE3\x81\x9F\xE3\x82\x81\xE3\x80\x81\xE6\x99\xB4\xE3\x82\x8C\xE3\x82\x84\xE6\x9B\x87\xE3\x82\x8A\xE3\x81\xAE\xE8\xA6\x8B\xE8\xBE\xBC\xE3\x81\xBF\xE3\x81\xA7\xE3\x81\x99\xE3\x80\x82\\n\\n\xEF\xBC\x9C\xE5\xA4\xA9\xE6\xB0\x97\xE5\xA4\x89\xE5\x8C\x96\xE7\xAD\x89\xE3\x81\xAE\xE7\x95\x99\xE6\x84\x8F\xE7\x82\xB9\xEF\xBC\x9E\\n\xEF\xBC\x93\xEF\xBC\x90\xE6\x97\xA5\xE3\x81\xAF\xE3\x80\x81\xE6\xB4\xA5\xE8\xBB\xBD\xE3\x81\xA7\xE3\x81\xAF\xE3\x80\x81\xE8\x90\xBD\xE9\x9B\xB7\xE3\x82\x84\xE7\xAA\x81\xE9\xA2\xA8\xE3\x81\xAB\xE6\xB3\xA8\xE6\x84\x8F\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84\xE3\x80\x82\"}"

何これどうするの?

jsonに変換させる

irb(main):291:0> res.read_body.class
=> String

文字列の型のデータなのか。
jsonの型にしてやればいいのかな?
一応やってみた。

res.read_body.to_json
=> "\"{\\\"publishingOffice\\\":\\\"青森地方気象台\\\",\\\"reportDatetime\\\":\\\"2022-10-30T10:31:00+09:00\\\",\\\"targetArea\\\":\\\"青森県\\\",\\\"headlineText\\\":\\\"\\\",\\\"text\\\":\\\"北日本は気圧の谷となっています。一方、中国東北区に高気圧があって、本州付近に張り出しています。\\\\n\\\\n青森県は、曇りや晴れで、雨の降っている所があります。\\\\n\\\\n30日は、気圧の谷や寒気の影響により、曇りや晴れで、雨や雷雨の所があるでしょう。\\\\n\\\\n31日は、高気圧に覆われるため、晴れや曇りの見込みです。\\\\n\\\\n<天気変化等の留意点>\\\\n30日は、津軽では、落雷や突風に注意してください。\\\"}\""

出典

感想

僕もここまでできるようになったんだな。
これからも頑張ろう。
次はjsonファイルをなんとか抽出できるのか調べてみる。

0
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
0
0