天気予報を表示させてみたいので必要になった。
参考のサイトでコードが見つかった。
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ファイルをなんとか抽出できるのか調べてみる。