Sha256: 3121e1d34a8ddc4edc68bd2d4b4a446e27ab2fe4d0cede3c5cafb26c40061a5b

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

require 'json'
require 'FileUtils'
require 'open-uri'

class SimpleOpenWeatherMap::Weather

  attr_accessor :icon_path

  def current(config)
    raise "SimpleOpenWeatherMap::Config only!" unless config.is_a?(SimpleOpenWeatherMap::Config)

    responseJson = http_connection(SimpleOpenWeatherMap::PATH_CURRENT).get_contents(current_params(config))
    return nil if responseJson.nil? || responseJson.empty?

    @current = ::JSON.parse(responseJson)

    if config.save_icon? then
      save_current_icon(@current["weather"][0]["icon"], config.save_icon_dir)
    end

    return @current
  end

  def forecast(config)
    raise "SimpleOpenWeatherMap::Config only!" unless config.is_a?(SimpleOpenWeatherMap::Config)

    responseJson = http_connection(SimpleOpenWeatherMap::PATH_FORECAST).get_contents(forecast_params(config))
    return nil if responseJson.nil? || responseJson.empty?

    ::JSON.parse(responseJson)
  end

  protected

  def http_connection(path)
    SimpleOpenWeatherMap::HttpConnection.new(SimpleOpenWeatherMap::BASE_URL + path)
  end

  def current_params(config)
    {
      APPID: config.app_id,
      units: config.unit,
      id:    config.city_id,
    }
  end

  def forecast_params(config)
    {
      APPID: config.app_id,
      units: config.unit,
      id:    config.city_id,
      cnt:   config.forecast_days,
    }
  end

  def save_current_icon(icon_name, dir)
    return nil if icon_name.nil? || icon_name.empty?

    icon_url = SimpleOpenWeatherMap::ICON_URL_TEMPLATE % [icon_name]
    @icon_path = "%s/%s" % [dir, "weather_icon.png"]

    ::FileUtils.mkdir_p(dir) unless ::FileTest.exist?(dir)

    open(@icon_path, 'wb') do |output|
      open(icon_url) do |data|
        output.write(data.read)
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_open_weather_map-0.1.0 lib/simple_open_weather_map/weather.rb