59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
#!/usr/bin/env ruby
|
|
# Fetch weather for your city from OpenWeatherMap
|
|
# You need an API key to fetch data, and store the API key inside ENV
|
|
# export I3_OWM_APIKEY="0986273cf8ac41578b90bcc90bc559b4"
|
|
# Depends on Weather Icons: https://erikflowers.github.io/weather-icons/
|
|
|
|
require 'open-uri'
|
|
require 'json'
|
|
# Get info from open weather map
|
|
class Weather
|
|
API = 'http://api.openweathermap.org/data/2.5/weather?id=CITY&units=metric&APPID=APIKEY'
|
|
API_KEY = 'API-KEY-HERE'
|
|
|
|
attr_accessor :api_url, :weather
|
|
|
|
def initialize(city)
|
|
@api_url = API.gsub('CITY', city).gsub('APIKEY', API_KEY)
|
|
@weather = contact_openweathermap
|
|
end
|
|
|
|
# Public - Return formated response - temperature / weather
|
|
#
|
|
# Returns String
|
|
def show
|
|
info = @weather['weather'][0]['main']
|
|
temp = @weather['main']['temp']
|
|
" #{temp} #{icon(info)} #{info}"
|
|
end
|
|
|
|
private
|
|
|
|
# Private - Use FontAwesome icons to show the weather conditions
|
|
#
|
|
# Returns Unicode char
|
|
def icon(weather)
|
|
case weather
|
|
when 'Fog' then ''
|
|
when /Clear/ then ' '
|
|
when /Rain/ then ''
|
|
when /Cloud/ then ''
|
|
when /Snow/ then ''
|
|
else
|
|
''
|
|
end
|
|
end
|
|
|
|
# Private - Fetch information from OpenWeatherMap
|
|
#
|
|
# Returns Hash
|
|
def contact_openweathermap
|
|
JSON.parse(open(@api_url).read)
|
|
end
|
|
end
|
|
|
|
# city = 'Zagreb'
|
|
city_id = '6618983'
|
|
out = Weather.new(city_id).show
|
|
|
|
puts "#{out}"
|