Es ist ein Programm, das die Wettervorhersage für den nächsten Tag mit Ruby
anzeigt.
Verwenden Sie "OpenWeatherMap" mit einer externen API.
ruby:2.6.6
ruby execute.rb
im Stammverzeichnis Ihrer App aus.Um dieses Programm zu erstellen, benötigen Sie den "API-Schlüssel" von "OpenWeatherMap".
Speichern Sie aus Sicherheitsgründen den API-Schlüssel in einer Umgebungsvariablen, auf die von außen nicht verwiesen werden kann.
Terminal
vim ~/.zshrc
Stellen Sie den Einfügemodus ein und fügen Sie Folgendes hinzu.
.zshrc
export WEATHER_API_KEY="Geben Sie den API-Schlüssel ein"
Beenden Sie das Speichern mit : wq
und führen Sie die folgenden Schritte aus, um die Einstellungen widerzuspiegeln.
Terminal
source ~/.zshrc
Erstellen Sie eine config.rb-Datei und fügen Sie Folgendes hinzu.
config.rb
WEATHER_API_KEY = ENV["WEATHER_API_KEY"]
Dieses Mal werden wir es verwenden, indem wir es in eine Konstante einsetzen. Sie können jetzt den API-Schlüssel mit dem konstanten Namen WEATHER_API_KEY verwenden.
Erstellen Sie eine prefectures.csv
-Datei und fügen Sie die folgende Präfekturliste hinzu.
prefectures.csv
prefecture,english
Hokkaido,Hokkaido
Präfektur Aomori,Aomori-ken
Präfektur Iwate,Iwate-ken
Präfektur Miyagi,Miyagi-ken
Akita,Akita-ken
Präfektur Yamagata,Yamagata-ken
Präfektur Fukushima,Fukushima-ken
Präfektur Ibaraki,Ibaraki-ken
Präfektur Tochigi,Tochigi-ken
Präfektur Gunma,Gunma-ken
Saitama,Saitama-ken
Präfektur Chiba,Chiba-ken
Tokio,Tokyo
Präfektur Kanagawa,Kanagawa-ken
Präfektur Niigata,Niigata-ken
Präfektur Toyama,Toyama-ken
Präfektur Ishikawa,Ishikawa-ken
Präfektur Fukui,Fukui-ken
Präfektur Yamanashi,Yamanashi-ken
Präfektur Nagano,Nagano-ken
Präfektur Gifu,Gifu-ken
Präfektur Shizuoka,Shizuoka-ken
Präfektur Aichi,Aichi-ken
Präfektur Mie,Mie-ken
Präfektur Shiga,Shiga-ken
Kyoto,Kyoto Prefecture
Präfektur Osaka,Osaka-fu
Präfektur Hyogo,hyogo
Präfektur Nara,Nara-ken
Präfektur Wakayama,Wakayama-ken
Präfektur Tottori,Tottori-ken
Präfektur Shimane,Shimane-ken
Präfektur Okayama,Okayama-ken
Präfektur Hiroshima,Hiroshima-ken
Präfektur Yamaguchi,Yamaguchi-ken
Präfektur Tokushima,Tokushima-ken
Präfektur Kagawa,Kagawa-ken
Präfektur Ehime,Ehime-ken
Präfektur Kochi,Kochi Prefecture
Präfektur Fukuoka,Fukuoka-ken
Präfektur Saga,Saga-ken
Präfektur Nagasaki,Nagasaki-ken
Präfektur Kumamoto,Kumamoto-ken
Präfektur Oita,Oita Prefecture
Präfektur Miyazaki,Miyazaki-ken
Präfektur Kagoshima,Kagoshima-ken
Präfektur Okinawa,Okinawa-ken
Erstellen Sie "execute.rb" und fügen Sie Folgendes hinzu.
execution.rb
require "csv"
prefectures = CSV.read("./prefectures.csv", headers: true)
Erstellen Sie weather_info.rb
und definieren Sie die Klasse.
weather_info.rb
class WeatherInfo
def initialize(prefectures)
@prefectures = prefectures
end
end
Erstellen Sie eine Instanz aus der Klasse "WeatherInfo" mit "execute.rb" und übergeben Sie die CSV-Daten
execution.rb
require "csv"
prefectures = CSV.read("./prefectures.csv", headers: true)
#---------Fügen Sie Folgendes hinzu---------
weather_info = WeatherInfo.new(prefectures)
#-----------Bisher-----------
Definieren Sie in der Klasse WeatherInfo
die Methode ** select_prefecture
, mit der Sie ** Präfekturen auflisten und Zahlen auswählen können.
weather_info.rb
class WeatherInfo
def initialize(prefectures)
@prefectures = prefectures
end
#---------Fügen Sie Folgendes hinzu---------
def select_prefecture
puts <<~TEXT
☀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☀
☁ ☁
☂ Wettervorhersage von morgen ☂
☆ ☆
☀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☀
TEXT
#Listenausgabe mit Indexnummer der Präfekturliste
@prefectures.each.with_index(1) do |prefecture, i|
puts "#{i.to_s.rjust(2)}. #{prefecture["prefecture"]}"
end
puts <<~TEXT
Die Wetterinformationen von morgen werden alle 3 Stunden angezeigt.
Bitte geben Sie die Präfekturnummer ein.
TEXT
while true
input = gets.to_i
#Beenden Sie die Methode, wenn die richtige Listennummer eingegeben wurde
if input.between?(1, @prefectures.count)
return @prefectures[input - 1]
else
#Wenn etwas anderes als die Listennummer eingegeben wird, wird ein Fehler angezeigt und ein erneutes Aufrufen erfolgt.
puts <<~TEXT
--------------------------------------------
Fehler: Bitte geben Sie nur die angezeigte Nummer ein.
--------------------------------------------
TEXT
end
end
end
#-----------Bisher-----------
end
--Wenn die Anzahl der Ziffern der Indexnummer in der angezeigten Präfekturliste unterschiedlich ist, wird sie nicht vertikal ausgerichtet. Ich benutze rjust (2)
, um es in einen String mit to_s
zu konvertieren, um es vertikal auszurichten.
Führen Sie die oben in "execute.rb" definierte Methode "select_prefecture" aus.
Lesen Sie auch weather_info.rb
.
execution.rb
require "csv"
#---------Fügen Sie Folgendes hinzu---------
require_relative "weather_info"
#-----------Bisher-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
#---------Fügen Sie Folgendes hinzu---------
prefecture = weather_info.select_prefecture
#-----------Bisher-----------
Holen Sie sich Wetterinformationen von der externen API OpenWeatherMap
.
Definieren Sie die Methode "get_weather_forecast" in "weather_info.rb".
weather_info.rb
class WeatherInfo
#----------***Abkürzung***---------
def select_prefecture
#--------***Abkürzung***---------
end
#---------Fügen Sie Folgendes hinzu---------
def get_weather_forecast(prefecture)
#Holen Sie sich Wetterinformationen von der externen API "Open Weather Map"
response = open("http://api.openweathermap.org/data/2.5/forecast" + "?q=#{prefecture["english"]}&appid=#{WEATHER_API_KEY}&units=metric&lang=ja")
#Analysieren Sie die erfassten Daten als JSON
data = JSON.parse(response.read)
#Holen Sie sich nur einige Informationen in JSON-Daten und hashen Sie sie
datas = { list: data["list"], prefecture_name: data["city"]["name"] }
end
#-----------Bisher-----------
end
--http: // api.openweathermap.org / data / 2.5 / Forecast
→ Sie können die Wettervorhersage 5 Tage lang alle 3 Stunden abrufen.
--? Q =
→ Geben Sie den englischen Städtenamen der CSV-Daten ein
--& appid =
→ Geben Sie den API-Schlüssel ein
-- & unit = metric
→ Geben Sie die Einheit des Datenformats an
--& lang =
→ Geben Sie die Sprache als Japanisch an
Sie können die Details der einzelnen Parameter und den Inhalt der JSON-Daten unter hier überprüfen.
Führen Sie die oben in "execute.rb" definierte Methode "get_weather_forecast" aus. Laden Sie außerdem die Datei "config.rb", die Bibliothek "json" und die Bibliothek "open-uri".
execution.rb
require "csv"
require_relative "weather_info"
#---------Fügen Sie Folgendes hinzu---------
require_relative "config"
require "json"
require "open-uri"
#-----------Bisher-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
prefecture = weather_info.select_prefecture
#---------Fügen Sie Folgendes hinzu---------
datas = weather_info.get_weather_forecast(prefecture)
#-----------Bisher-----------
Definieren Sie die Methode display_weather_forecast
, um die erfassten Wetterinformationen aufzulisten.
weather_info.rb
class WeatherInfo
#----------***Abkürzung***---------
def select_prefecture
#--------***Abkürzung***---------
end
def get_weather_forecast(prefecture)
#--------***Abkürzung***---------
end
#---------Fügen Sie Folgendes hinzu---------
def display_weather_forecast(weathers)
#Machen Sie es möglich, den Tag auf Japanisch anzuzeigen
wd = ["Tag", "Mond", "Feuer", "Wasser", "Holz", "Geld", "Boden"]
#nächster Tag
tomorrow = Date.today + 1
puts <<~TEXT
☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂
#{weathers[:prefecture_name]}von#{tomorrow.strftime("%m/%d(#{wd[tomorrow.wday]})")}von天気予報
☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂
TEXT
weathers[:list].each do |weather|
#In DateTime-Typ konvertieren
date_and_time = DateTime.parse(weather["dt_txt"])
#Zum Vergleich steht auch der Datumstyp zur Verfügung
date = Date.parse(weather["dt_txt"])
#Listenanzeige nur zur Information des nächsten Tages
if date == tomorrow
puts <<~TEXT
---------------------------
#{date_and_time.strftime("%p%Um H.")}
Wetter:#{weather["weather"][0]["description"]}
Temperatur:#{weather["main"]["temp"]}℃
---------------------------
TEXT
end
end
end
#-----------Bisher-----------
end
Führen Sie die oben in "execute.rb" definierte Methode "display_weather_forecast" aus.
Laden Sie auch die date
Bibliothek.
execution.rb
require "csv"
require_relative "weather_info"
require_relative "config"
require "json"
require "open-uri"
#---------Fügen Sie Folgendes hinzu---------
require "date"
#-----------Bisher-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
prefecture = weather_info.select_prefecture
datas = weather_info.get_weather_forecast(prefecture)
#---------Fügen Sie Folgendes hinzu---------
weather_info.display_weather_forecast(datas)
#-----------Bisher-----------
Jetzt, wo es fertig ist, der Rest
Terminal
ruby execution.rb
Wenn Sie ausführen, funktioniert es entsprechend dem fertigen Image.
https://github.com/keisuke-333/Weather_Forecast
Recommended Posts