質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3143閲覧

都市名を入力すると、天気、天気(詳細)、湿度、最低気温、最高気温を表示するプログラムを作成したい。

Eston

総合スコア67

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2018/02/19 02:42

都市名を入力すると、天気、天気(詳細)、湿度、最低気温、最高気温を表示するプログラムを作成したいを考えています。
現在OpenWeatherMapのAPIを取得して、次の要素のみターミナル上に表示したいと考えています。

・都市名(name)
・天気(weather.main)
・天気(詳細)(weather.description)
・湿度(main.humidity)
・最低気温(main.temp_min)
・最高気温(main.temp_max)

<現在のコード>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
puts "都市名を入力してください"
name = gets.chomp

API_KEY = "My API Key"
BASE_URL = "http://api.openweathermap.org/data/2.5/forecast"

require "json"
require "open-uri"

response = open(BASE_URL + "?q=#{name},jp&APPID=#{API_KEY}")
puts JSON.pretty_generate(JSON.parse(response.read))
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ですが、これでは、
とても長く、緯度と経度や、上に表示した要素以上のものが出力されてしまうので、それを制限したいのですが、
どうすればよろしいでしょうか?

現在hashを使って配列の中から、nameのみ出力できないか考えています。

最終的な出力例としては
ーーーーーーーーーーーーーーーーーーーーーーーー
ruby thiscode.rb

name:tokyo
weather.main:sunny
........
main.temp_max:40℃
ーーーーーーーーーーーーーーーーーーーーーーーー

をイメージしております。

何かご存知であればご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問に記載されたプログラムでは、API レスポンスのJSONを全て表示していますから長くなっていますね。
JSON ファイルを確認して、必要な部分だけを取り出すようなプログラムにする方がいいでしょう。

JSON の結果が、無料天気予報APIのOpenWeatherMapを使ってみる と同じだと仮定すると 以下のような感じでしょうか。

気温を取り出す例(データを抜き出している部分のみ記載)
(なお、シンボル化しているのは単に好みの問題です。)

ruby

1data = JSON.parse(response.read, {symbolize_names: true}) 2puts data[:list][0][:main][:temp]

参考:
module JSON


APIのレスポンス結果では、温度の単位が、「ケルビン」になっているようなので、変換が必要ですね。

ケルビンから摂氏(°C)への変換は、[°C] = [K] − 273.15 でできるようです。

投稿2018/02/19 03:28

編集2018/02/19 03:31
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eston

2018/02/19 04:48

もう、最高の回答をありがとうございます。 参考にしていたサイトまで当てられて、さらにケルビンから摂氏の変換まで、明記してくださるとは思いませんでした。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問