C'est un programme qui affiche les prévisions météorologiques du lendemain avec Ruby
.
Utilisez ʻOpenWeatherMap` avec une API externe.
ruby:2.6.6
ruby execution.rb
dans le répertoire racine de votre application.Pour créer ce programme, vous aurez besoin de la ʻAPI key de ʻOpenWeatherMap
.
Par mesure de sécurité, stockez la «clé API» dans une variable d'environnement qui ne peut pas être référencée de l'extérieur.
Terminal
vim ~/.zshrc
Réglez en mode insertion et ajoutez ce qui suit.
.zshrc
export WEATHER_API_KEY="Entrez la clé API"
Terminez l'enregistrement avec : wq
, exécutez ce qui suit pour refléter les paramètres.
Terminal
source ~/.zshrc
Créez un fichier config.rb
et ajoutez ce qui suit.
config.rb
WEATHER_API_KEY = ENV["WEATHER_API_KEY"]
Cette fois, nous allons l'utiliser en le substituant à une constante.
Vous pouvez maintenant utiliser la ʻAPI key avec le nom constant
WEATHER_API_KEY`.
Créez un fichier prefectures.csv
et ajoutez la liste de préfecture suivante.
prefectures.csv
prefecture,english
Hokkaido,Hokkaido
Préfecture d'Aomori,Aomori-ken
Préfecture d'Iwate,Iwate-ken
Préfecture de Miyagi,Miyagi-ken
Akita,Akita-ken
Préfecture de Yamagata,Yamagata-ken
Préfecture de Fukushima,Fukushima-ken
Préfecture d'Ibaraki,Ibaraki-ken
Préfecture de Tochigi,Tochigi-ken
Préfecture de Gunma,Gunma-ken
Saitama,Saitama-ken
Préfecture de Chiba,Chiba-ken
Tokyo,Tokyo
Préfecture de Kanagawa,Kanagawa-ken
Préfecture de Niigata,Niigata-ken
Préfecture de Toyama,Toyama-ken
Préfecture d'Ishikawa,Ishikawa-ken
Préfecture de Fukui,Fukui-ken
Préfecture de Yamanashi,Yamanashi-ken
Préfecture de Nagano,Nagano-ken
Préfecture de Gifu,Gifu-ken
Préfecture de Shizuoka,Shizuoka-ken
Préfecture d'Aichi,Aichi-ken
Préfecture de Mie,Mie-ken
Préfecture de Shiga,Shiga-ken
Kyoto,Kyoto Prefecture
Préfecture d'Osaka,Osaka-fu
Préfecture de Hyogo,hyogo
Préfecture de Nara,Nara-ken
Préfecture de Wakayama,Wakayama-ken
Préfecture de Tottori,Tottori-ken
Préfecture de Shimane,Shimane-ken
Préfecture d'Okayama,Okayama-ken
Préfecture d'Hiroshima,Hiroshima-ken
Préfecture de Yamaguchi,Yamaguchi-ken
Préfecture de Tokushima,Tokushima-ken
Préfecture de Kagawa,Kagawa-ken
Préfecture d'Ehime,Ehime-ken
Préfecture de Kochi,Kochi Prefecture
Préfecture de Fukuoka,Fukuoka-ken
Préfecture de Saga,Saga-ken
Préfecture de Nagasaki,Nagasaki-ken
Préfecture de Kumamoto,Kumamoto-ken
Préfecture d'Oita,Oita Prefecture
Préfecture de Miyazaki,Miyazaki-ken
Préfecture de Kagoshima,Kagoshima-ken
Préfecture d'Okinawa,Okinawa-ken
Créez ʻexecution.rb` et ajoutez ce qui suit.
execution.rb
require "csv"
prefectures = CSV.read("./prefectures.csv", headers: true)
Créez weather_info.rb
et définissez la classe.
weather_info.rb
class WeatherInfo
def initialize(prefectures)
@prefectures = prefectures
end
end
ʻExecution.rb crée une instance de la classe
WeatherInfo` et transmet les données CSV
execution.rb
require "csv"
prefectures = CSV.read("./prefectures.csv", headers: true)
#---------Ajoutez ce qui suit---------
weather_info = WeatherInfo.new(prefectures)
#-----------Jusque là-----------
Dans la classe WeatherInfo
, définissez la méthode ** select_prefecture
qui vous permet de lister ** les préfectures et de sélectionner des nombres.
weather_info.rb
class WeatherInfo
def initialize(prefectures)
@prefectures = prefectures
end
#---------Ajoutez ce qui suit---------
def select_prefecture
puts <<~TEXT
☀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☀
☁ ☁
☂ Prévisions météo de demain ☂
☆ ☆
☀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~☀
TEXT
#Sortie de liste avec numéro d'index de la liste de préfecture
@prefectures.each.with_index(1) do |prefecture, i|
puts "#{i.to_s.rjust(2)}. #{prefecture["prefecture"]}"
end
puts <<~TEXT
Les informations météorologiques de demain seront affichées toutes les 3 heures.
Veuillez saisir le numéro de préfecture.
TEXT
while true
input = gets.to_i
#Quittez la méthode si le numéro de liste correct est entré
if input.between?(1, @prefectures.count)
return @prefectures[input - 1]
else
#Si quelque chose d'autre que le numéro de liste est entré, une erreur sera affichée et un
puts <<~TEXT
--------------------------------------------
erreur: veuillez entrer uniquement le numéro affiché.
--------------------------------------------
TEXT
end
end
end
#-----------Jusque là-----------
end
--Si le nombre de chiffres du numéro d'index dans la liste de préfecture affichée est différent, il ne sera pas aligné verticalement. J'utilise rjust (2)
pour le convertir en une chaîne avec to_s
pour l'aligner verticalement.
--Si une valeur autre que le numéro d'index est entrée, une déclaration d'erreur sera affichée et une boucle sera affichée.
select_prefecture
dans execution.rb`ʻExécute la méthode select_prefecture
définie ci-dessus dans execution.rb. Lisez également
weather_info.rb`.
execution.rb
require "csv"
#---------Ajoutez ce qui suit---------
require_relative "weather_info"
#-----------Jusque là-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
#---------Ajoutez ce qui suit---------
prefecture = weather_info.select_prefecture
#-----------Jusque là-----------
Obtenez des informations météorologiques à partir de l'API externe ʻOpenWeatherMap. Définissez la méthode
get_weather_forecast dans
weather_info.rb`.
weather_info.rb
class WeatherInfo
#----------***Abréviation***---------
def select_prefecture
#--------***Abréviation***---------
end
#---------Ajoutez ce qui suit---------
def get_weather_forecast(prefecture)
#Obtenez des informations météorologiques à partir de l'API externe "Open Weather Map"
response = open("http://api.openweathermap.org/data/2.5/forecast" + "?q=#{prefecture["english"]}&appid=#{WEATHER_API_KEY}&units=metric&lang=ja")
#Analysez les données acquises au format JSON
data = JSON.parse(response.read)
#Obtenez seulement quelques informations dans les données JSON et hachez-les
datas = { list: data["list"], prefecture_name: data["city"]["name"] }
end
#-----------Jusque là-----------
end
--http: // api.openweathermap.org / data / 2.5 / prévisions
→ Vous pouvez obtenir les prévisions météorologiques toutes les 3 heures pendant 5 jours.
--? Q =
→ Entrez le nom anglais de la ville des données CSV
--& appid =
→ Entrez la clé API
-- & units = metric
→ Spécifiez l'unité de format de données
--& lang =
→ Spécifiez la langue en japonais
Vous pouvez vérifier les détails de chaque paramètre et le contenu des données JSON sur ici.
get_weather_forecast
dans execution.rb`ʻExecution.rbla méthode
get_weather_forecastdéfinie ci-dessus. Chargez également le fichier
config.rb, la bibliothèque
json et la bibliothèque ʻopen-uri
.
execution.rb
require "csv"
require_relative "weather_info"
#---------Ajoutez ce qui suit---------
require_relative "config"
require "json"
require "open-uri"
#-----------Jusque là-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
prefecture = weather_info.select_prefecture
#---------Ajoutez ce qui suit---------
datas = weather_info.get_weather_forecast(prefecture)
#-----------Jusque là-----------
Définissez la méthode display_weather_forecast
pour lister les informations météorologiques acquises.
weather_info.rb
class WeatherInfo
#----------***Abréviation***---------
def select_prefecture
#--------***Abréviation***---------
end
def get_weather_forecast(prefecture)
#--------***Abréviation***---------
end
#---------Ajoutez ce qui suit---------
def display_weather_forecast(weathers)
#Rendre possible d'afficher le jour en japonais
wd = ["journée", "Mois", "Feu", "eau", "bois", "Argent", "sol"]
#le prochain jour
tomorrow = Date.today + 1
puts <<~TEXT
☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂
#{weathers[:prefecture_name]}de#{tomorrow.strftime("%m/%d(#{wd[tomorrow.wday]})")}de天気予報
☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂~~☀~~☆~~☁~~☂
TEXT
weathers[:list].each do |weather|
#Convertir en type DateTime
date_and_time = DateTime.parse(weather["dt_txt"])
#Le type de date est également disponible pour comparaison
date = Date.parse(weather["dt_txt"])
#Affichage de la liste uniquement pour les informations du lendemain
if date == tomorrow
puts <<~TEXT
---------------------------
#{date_and_time.strftime("%p%Autour de H")}
Météo:#{weather["weather"][0]["description"]}
Température:#{weather["main"]["temp"]}℃
---------------------------
TEXT
end
end
end
#-----------Jusque là-----------
end
display_weather_forecast
dans execution.rb`ʻExécute la méthode display_weather_forecast
définie ci-dessus dans execution.rb. Chargez également la bibliothèque
date`.
execution.rb
require "csv"
require_relative "weather_info"
require_relative "config"
require "json"
require "open-uri"
#---------Ajoutez ce qui suit---------
require "date"
#-----------Jusque là-----------
prefectures = CSV.read("./prefectures.csv", headers: true)
weather_info = WeatherInfo.new(prefectures)
prefecture = weather_info.select_prefecture
datas = weather_info.get_weather_forecast(prefecture)
#---------Ajoutez ce qui suit---------
weather_info.display_weather_forecast(datas)
#-----------Jusque là-----------
Maintenant que c'est terminé, le reste
Terminal
ruby execution.rb
Si vous exécutez, cela fonctionnera selon l'image terminée.
https://github.com/keisuke-333/Weather_Forecast
Recommended Posts