2016-09-28 27 views
0

これは私がやろうとしていることです。 Rubyファイルを単純に作成していますが、そのRubyファイルはユーザーとして入力、都市、およびその都市の天気結果を返します。私はRubyで書いたことも、APIを使ったこともありません。しかし、ここに私の試みです。以下JSONから特定の値を取得

APIレスポンス:

> {"coord"=>{"lon"=>-85.68, "lat"=>40.11}, "weather"=>[{"id"=>501, 
> "main"=>"Rain", "description"=>"moderate rain", "icon"=>"10d"}], 
> "base"=>"stations", "main"=>{"temp"=>57.78, "pressure"=>1009, 
> "humidity"=>100, "temp_min"=>57, "temp_max"=>60.01}, 
> "wind"=>{"speed"=>5.17, "deg"=>116.005}, "rain"=>{"1h"=>1.02}, 
> "clouds"=>{"all"=>92}, "dt"=>1475075671, "sys"=>{"type"=>3, 
> "id"=>187822, "message"=>0.1645, "country"=>"US", 
> "sunrise"=>1475062634, "sunset"=>1475105280}, "id"=>4917592, 
> "name"=>"Anderson", "cod"=>200} [Finished in 2.0s] 

ルビー以下のファイル:

require 'net/http' 
require 'json' 

url = 'http://api.openweathermap.org/data/2.5/weather?q=anderson&APPID=5c89010425b4d730b7558f57234ea3c8&units=imperial' 
uri = URI(url) 
response = Net::HTTP.get(uri) 
parsed = JSON.parse(response) 
puts parsed #Print this so I can see results 
inputs temp = JSON.parse(response)['main']['temp'] 
puts desc = JSON.parse(response)['weather']['description'] 
puts humid = JSON.parse(response)['main']['humidity'] 
puts wind = JSON.parse(response)['wind']['speed'] 

私は温度のみ、説明、湿度、風のようにいくつかの項目を引き出したやろうとしました。しかし、私はそれを正しくするように見えることはできません。私はそれぞれの試みで未定義のエラーを取得し続けます。 (宝石やRubyにまだ組み込まれていないものは使用しないでこれを完成させたい)(私はユーザー入力のための部品をまだ書いていない)

答えて

0

あなたの問題は応答['weather'あなたは['weather'] ['description']にアクセスすることができません。代わりに['weather'] [0] ['description']のようなことをする必要があります。

2.3.0 :020 > puts parsed['weather'][0]['description'] 
moderate rain 
2.3.0 :021 > puts parsed['main']['humidity'] 
100 
2.3.0 :022 > puts parsed['wind']['speed'] 
5.17 
2.3.0 :025 > puts parsed['main']['temp'] 
58.8 
+0

完璧、ありがとうございます! –

+0

私の答えが役に立ったら、それを受け入れられた答えとすることができますか?ありがとう:) – fylie

関連する問題