Open Weather Map API를 통해 날씨 정보를 얻고 Mac의 알림 센터에 표시

7469 단어 OpenWeatherMapRuby
Cool.io: Timer Watcher, OpenWeatherMap API, terminal-notifier를 사용하여 지정한 초 간격으로 날씨 정보를 얻고Mac의 알림 센터에 표시되는 샘플 프로그램입니다.

차리다

  • Open WeatherMap의 계정 등록(Free 프로그램 있음) 및 API 키 획득
  • 상기 샘플 내의 YOUR_API_KEY
  • 로 설정
  • gem install cool.io
  • gem install terminal-notifier
  • 견본


    weather_watcher.rb
    require 'net/http'
    require 'uri'
    require 'json'
    require 'cool.io'
    require 'terminal-notifier'
    
    class WeatherWatcher < Coolio::TimerWatcher
      API_KEY = 'YOUR_API_KEY'
      CITY_NAME = 'Tokyo'
      COUNTRY_CODE = 'JP'
      INTERVAL_SEC = 300
    
      def initialize
        super(INTERVAL_SEC, true)
      end
    
      def on_timer
        weather = get_weather
        icon_id = weather['weather'][0]['icon']
        temperature = weather['main']['temp']
        description = weather['weather'][0]['description']
        notify(icon_id, temperature, description)
      end
    
      def get_weather
        uri = URI('http://api.openweathermap.org')
        uri.path = '/data/2.5/weather'
        params = { q: "#{CITY_NAME},#{COUNTRY_CODE}", units: 'metric', appid: API_KEY }
        uri.query = URI.encode_www_form(params)
        response = Net::HTTP.get(uri)
        JSON.parse(response)
      end
    
      def notify(icon, temperature, description)
        TerminalNotifier.notify(
          "#{CITY_NAME}, #{COUNTRY_CODE}",
          title: "#{temperature}℃, #{description}",
          contentImage: "http://openweathermap.org/img/w/#{icon}.png"
        )
      end
    end
    
    def run
      loop = Coolio::Loop.new
      timer = WeatherWatcher.new
      loop.attach(timer)
      loop.run
    ensure
      timer.detach
    end
    
    run
    

    참고 문헌

  • Cool.확장, GVL 및 이벤트 제어
  • Call current weather data for one location
  • 좋은 웹페이지 즐겨찾기