前提・実現したいこと
プログラミングの勉強を始めて2ヶ月目です。
rubyでLivedoor の「お天気Webサービス」の API から情報を取得し、
ターミナルで表示するアプリを作っています。
Livedoorのデータで時間帯によっては最高気温または最低気温がnullの場合があります。undefined method `[]' for nil:NilClass (NoMethodError)
この場合に"データなし"等と表示したいのですが、どうしたら良いでしょうか。(データがnullでない場合は正常に作動します)
ruby -v 5.2.1
ご教示宜しくお願い致します。
if tomorrow_forecast["temperature"]["max"]["celsius"] = nil
条件
等googleで見つかったことは試しましたが、解決しなかったため具体的なコードを教えて頂きたいです。
該当のソースコード
require 'uri' require 'net/http' require 'json' require 'date' def tenki_tokyo tokyo = "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010" info(tokyo) end def info(place) uri = URI.parse(place) res = Net::HTTP.get(uri) res = JSON.parse(res) location = res["location"]["city"] today = Date.today.day tommorow = Date.today.day + 1 forecasts = res["forecasts"] today_forecast = forecasts[0] today_telop = today_forecast["telop"] today_max = today_forecast["temperature"]["max"]["celsius"] today_min = today_forecast["temperature"]["min"]["celsius"] tomorrow_forecast = forecasts[1] tomorrow_telop = tomorrow_forecast["telop"] tomorrow_max = tomorrow_forecast["temperature"]["max"]["celsius"] tomorrow_min = tomorrow_forecast["temperature"]["min"]["celsius"] puts " #{location}の天気: 今日(#{today}日) :#{today_telop}、最高気温:#{today_max}、最低気温:#{today_min} 明日(#{tommorow}日) :#{tomorrow_telop}、最高気温:#{tomorrow_max}、最低気温:#{tomorrow_min}" end def end_program exit end def exception puts "入力された値は無効な値です" end while true do # メニューの表示 puts "天気を確認したい地名を選択して下さい。" puts "\n[1]東京\n[0]アプリを終了する" input = gets.to_i if input == 1 then tenki_tokyo elsif input == 0 then end_program else exception end end
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/14 23:37