rubyでHTTPリクエストを行う

天気予報を表示させてみたいので必要になった。
# 参考のサイトでコードが見つかった。
```rb
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)
```
### 出典 
https://www.twilio.com/blog/5-ways-make-http-requests-ruby-jp

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

## URI（）とは？
URI を扱うためのモジュールです。 

https://docs.ruby-lang.org/ja/latest/class/URI.html
### 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メソッドのことだと思う。

# 出典 
https://www.sbcr.jp/product/4797388817/

# このメソッドはどういう風に使うのか？
```rb
uri = URI('')
```
### 実験してみた。
```rb
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
```
```rb
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```クラスになるのか。

## このメソッドはどういう風に使うのか？
```rb
res = Net::HTTP.get_response(uri)
```
```rb
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'```が必要なのではないか？
```rb
irb(main):266:0> require 'net/http'
=> true
.
.
.
irb(main):268:0> res = Net::HTTP.get_response(uri)
=> #<Net::HTTPOK 200 OK readbody=true>
```
おぉなった。
### 出典
https://docs.ruby-lang.org/ja/latest/class/Net=3a=3aHTTP.html

```rb
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に変換させる
```rb
irb(main):291:0> res.read_body.class
=> String
```
文字列の型のデータなのか。
jsonの型にしてやればいいのかな？
一応やってみた。
```rb
res.read_body.to_json
=> "\"{\\\"publishingOffice\\\":\\\"青森地方気象台\\\",\\\"reportDatetime\\\":\\\"2022-10-30T10:31:00+09:00\\\",\\\"targetArea\\\":\\\"青森県\\\",\\\"headlineText\\\":\\\"\\\",\\\"text\\\":\\\"北日本は気圧の谷となっています。一方、中国東北区に高気圧があって、本州付近に張り出しています。\\\\n\\\\n青森県は、曇りや晴れで、雨の降っている所があります。\\\\n\\\\n３０日は、気圧の谷や寒気の影響により、曇りや晴れで、雨や雷雨の所があるでしょう。\\\\n\\\\n３１日は、高気圧に覆われるため、晴れや曇りの見込みです。\\\\n\\\\n＜天気変化等の留意点＞\\\\n３０日は、津軽では、落雷や突風に注意してください。\\\"}\""
```
### 出典
https://gihyo.jp/book/2017/978-4-7741-9397-7

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

https://qiita.com/masatom86650860/items/6289cebfba7f428ac60d