From 268bf7d56fcd122badd929bf18e8e69a84ff0a42 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:57:21 -0500 Subject: [PATCH 01/17] Add agents file AGENTS.md with development workflow and commit conventions, CLAUDE.md symlink. --- AGENTS.md | 27 +++++++++++++++++++++++++++ CLAUDE.md | 1 + 2 files changed, 28 insertions(+) create mode 100644 AGENTS.md create mode 120000 CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..85744fc --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,27 @@ +# AGENTS.md + +## Development Workflow + +- Git workflow: GitHub flow +- Small (but logical) commits that can each be deployed independently +- Each commit must not break CI +- Prefer incremental changes over large feature branches + +### Commit Messages + +**Subject:** Max 50 chars, capitalized, no period, imperative mood ("Add" not "Added") + +**Body:** Wrap at 72 chars, explain what/why not how, blank line after subject + +**Leading verbs:** Add, Remove, Fix, Upgrade, Refactor, Reformat, Document, Reword + +## Development Standards + +- README updated with API changes +- **Tests must cover all behavior** - check with `coverage/index.html` after running specs +- RuboCop enforces 80-char line limit and other style + +## Deployment + +- Kicking off PR: `ghprcw` +- Never deploy anything diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file From 6c3db9cacf194552b24f0dc42798d428e0f2c80a Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:58:16 -0500 Subject: [PATCH 02/17] Replace Travis/Hound CI with GitHub Actions Ruby 3.1/3.2/3.3/3.4 matrix running rspec and rubocop. --- .github/workflows/ci.yml | 23 +++++++++++++++++++++++ .hound.yml | 3 --- .travis.yml | 8 -------- 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .hound.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..799d97a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI +on: + push: + branches: [master] + pull_request: + branches: [master] +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + ruby-version: ['3.1', '3.2', '3.3', '3.4'] + steps: + - uses: actions/checkout@v4 + - name: Set up Ruby ${{ matrix.ruby-version }} + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true + - name: Run tests + run: bundle exec rspec + - name: Run linter + run: bundle exec rubocop diff --git a/.hound.yml b/.hound.yml deleted file mode 100644 index c67bfec..0000000 --- a/.hound.yml +++ /dev/null @@ -1,3 +0,0 @@ -ruby: - enabled: true - config_file: .rubocop.yml \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 575ee26..0000000 --- a/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: ruby -sudo: true -rvm: -- 2.4.0 -- 2.3.3 -- 2.2.6 - -script: rspec spec From 1aee170c73917290830ef08e2e8580340eec9776 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:58:57 -0500 Subject: [PATCH 03/17] Modernize build configuration Drop runtime deps (httpclient, nokogiri), add rubocop and guard-rspec dev deps, require Ruby >= 3.1, add gem metadata, fix Gemfile.lock gitignore entry. --- .gitignore | 2 +- .rubocop.yml | 33 ++++++++++++++++++++++++++++++++- gull.gemspec | 28 ++++++++++++++++++---------- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index f650424..9bf8b69 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ /coverage /pkg /tmp -.Gemfile.lock +Gemfile.lock .ruby-version diff --git a/.rubocop.yml b/.rubocop.yml index 20f3223..da8e6fa 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,36 @@ AllCops: + TargetRubyVersion: 3.1 + NewCops: enable + SuggestExtensions: false Exclude: - 'spec/spec_helper.rb' + - 'gull.gemspec' + - 'vendor/**/*' +Metrics/BlockLength: + Exclude: + - 'spec/**/*' +Metrics/MethodLength: + Max: 20 + Exclude: + - 'spec/**/*' +Metrics/AbcSize: + Max: 35 + Exclude: + - 'spec/**/*' +Metrics/ClassLength: + Enabled: false +Metrics/CyclomaticComplexity: + Enabled: false +Metrics/PerceivedComplexity: + Enabled: false +Layout/LineLength: + Max: 80 + Exclude: + - 'spec/**/*' Style/StringLiterals: - EnforcedStyle: single_quotes \ No newline at end of file + EnforcedStyle: single_quotes +Style/StringConcatenation: + Exclude: + - 'spec/**/*' +Naming/PredicateMethod: + Enabled: false diff --git a/gull.gemspec b/gull.gemspec index a4f6619..f3702d0 100644 --- a/gull.gemspec +++ b/gull.gemspec @@ -1,5 +1,6 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) +# frozen_string_literal: true + +lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'gull/version' @@ -12,19 +13,26 @@ Gem::Specification.new do |spec| spec.description = 'Client for parsing NOAA/NWS alerts, warnings, and watches.' spec.homepage = 'https://github.com/sethdeckard/gull' spec.license = 'MIT' + spec.required_ruby_version = '>= 3.1' + + spec.metadata = { + 'source_code_uri' => 'https://github.com/sethdeckard/gull', + 'changelog_uri' => 'https://github.com/sethdeckard/gull/blob/master/CHANGELOG.md', + 'bug_tracker_uri' => 'https://github.com/sethdeckard/gull/issues' + } - spec.files = `git ls-files -z`.split("\x0") + spec.files = `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{^(AGENTS|CLAUDE)\.md$}) + end spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ['lib'] - spec.add_runtime_dependency 'httpclient' - spec.add_runtime_dependency 'nokogiri', '>= 1.6.8' - spec.add_development_dependency 'bundler' + spec.add_development_dependency 'guard-rspec' spec.add_development_dependency 'rake' - spec.add_development_dependency 'rspec', '>=3.0' - spec.add_development_dependency 'coveralls' - spec.add_development_dependency 'guard' + spec.add_development_dependency 'rspec', '>= 3.0' + spec.add_development_dependency 'rubocop' + spec.add_development_dependency 'rubocop-rake' + spec.add_development_dependency 'simplecov' spec.add_development_dependency 'webmock' end From 7ba0e4477ee883c993901a4bfabdab75835b3910 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:59:07 -0500 Subject: [PATCH 04/17] Clean up spec_helper and Guardfile Remove Coveralls integration and boilerplate comments, add frozen_string_literal pragmas. --- Guardfile | 2 + spec/spec_helper.rb | 93 +++------------------------------------------ 2 files changed, 7 insertions(+), 88 deletions(-) diff --git a/Guardfile b/Guardfile index 0ecbb65..8bb2094 100644 --- a/Guardfile +++ b/Guardfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + guard :rspec, cmd: 'bundle exec rspec' do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index aa35124..6ed5602 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,100 +1,17 @@ -require 'gull' -require 'coveralls' -require 'simplecov' -require 'webmock/rspec' +# frozen_string_literal: true -SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([ - SimpleCov::Formatter::HTMLFormatter, - Coveralls::SimpleCov::Formatter -]) +require 'simplecov' SimpleCov.start -# This file was generated by the `rspec --init` command. Conventionally, all -# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. -# The generated `.rspec` file contains `--require spec_helper` which will cause this -# file to always be loaded, without a need to explicitly require it in any files. -# -# Given that it is always loaded, you are encouraged to keep this file as -# light-weight as possible. Requiring heavyweight dependencies from this file -# will add to the boot time of your test suite on EVERY test run, even for an -# individual file that may not need all of that loaded. Instead, consider making -# a separate helper file that requires the additional dependencies and performs -# the additional setup, and require it from the spec files that actually need it. -# -# The `.rspec` file also contains a few flags that are not defaults but that -# users commonly want. -# -# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +require 'gull' +require 'webmock/rspec' + RSpec.configure do |config| - # rspec-expectations config goes here. You can use an alternate - # assertion/expectation library such as wrong or the stdlib/minitest - # assertions if you prefer. config.expect_with :rspec do |expectations| - # This option will default to `true` in RSpec 4. It makes the `description` - # and `failure_message` of custom matchers include text for helper methods - # defined using `chain`, e.g.: - # be_bigger_than(2).and_smaller_than(4).description - # # => "be bigger than 2 and smaller than 4" - # ...rather than: - # # => "be bigger than 2" expectations.include_chain_clauses_in_custom_matcher_descriptions = true end - # rspec-mocks config goes here. You can use an alternate test double - # library (such as bogus or mocha) by changing the `mock_with` option here. config.mock_with :rspec do |mocks| - # Prevents you from mocking or stubbing a method that does not exist on - # a real object. This is generally recommended, and will default to - # `true` in RSpec 4. mocks.verify_partial_doubles = true end - -# The settings below are suggested to provide a good initial experience -# with RSpec, but feel free to customize to your heart's content. -=begin - # These two settings work together to allow you to limit a spec run - # to individual examples or groups you care about by tagging them with - # `:focus` metadata. When nothing is tagged with `:focus`, all examples - # get run. - config.filter_run :focus - config.run_all_when_everything_filtered = true - - # Limits the available syntax to the non-monkey patched syntax that is recommended. - # For more details, see: - # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax - # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ - # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching - config.disable_monkey_patching! - - # This setting enables warnings. It's recommended, but in some cases may - # be too noisy due to issues in dependencies. - config.warnings = true - - # Many RSpec users commonly either run the entire suite or an individual - # file, and it's useful to allow more verbose output when running an - # individual spec file. - if config.files_to_run.one? - # Use the documentation formatter for detailed output, - # unless a formatter has already been configured - # (e.g. via a command-line flag). - config.default_formatter = 'doc' - end - - # Print the 10 slowest examples and example groups at the - # end of the spec run, to help surface which specs are running - # particularly slow. - config.profile_examples = 10 - - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = :random - - # Seed global randomization in this process using the `--seed` CLI option. - # Setting this allows you to use `--seed` to deterministically reproduce - # test failures related to randomization by passing the same `--seed` value - # as the one that triggered the failure. - Kernel.srand config.seed -=end end From 66a74c23341de14f2eaed16aa48a18af39a2eecf Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:59:22 -0500 Subject: [PATCH 05/17] Migrate Client to new NWS API Replace httpclient with net/http, use api.weather.gov/alerts JSON endpoint. Add required User-Agent header and area filtering option. --- lib/gull/client.rb | 77 ++++++++++++++++++++++++---------------------- lib/gull/error.rb | 2 ++ 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/lib/gull/client.rb b/lib/gull/client.rb index 269df18..243096a 100644 --- a/lib/gull/client.rb +++ b/lib/gull/client.rb @@ -1,65 +1,70 @@ -require 'httpclient' -require 'nokogiri' +# frozen_string_literal: true module Gull - # Client exposes methods and options for fetching alerts from the NWS/NOAA - # web service class Client + URL = 'https://api.weather.gov/alerts/active' + USER_AGENT = "gull/#{VERSION} (Ruby #{RUBY_VERSION})" + attr_accessor :errors def initialize(options = {}) - @options = { - url: 'http://alerts.weather.gov/cap/us.php?x=1', - strict: false - }.merge options + @options = options end def fetch self.errors = [] - content = response - document = Nokogiri::XML content do |config| - config.strict if @options[:strict] - end - process document.xpath('//xmlns:feed/xmlns:entry', namespaces) + json = response + data = JSON.parse(json) + process(data['features'] || []) end private def response - client = HTTPClient.new - begin - return client.get_content @options[:url] - rescue HTTPClient::TimeoutError - raise TimeoutError, 'Timeout while connecting to NWS web service' - rescue HTTPClient::KeepAliveDisconnected, HTTPClient::BadResponseError, - SocketError, Errno::ECONNREFUSED, Errno::ECONNRESET - raise HttpError, 'Could not connect to NWS web service' + uri = build_uri + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + request = Net::HTTP::Get.new(uri) + request['User-Agent'] = USER_AGENT + request['Accept'] = 'application/geo+json' + result = http.request(request) + result.body + rescue Net::OpenTimeout, Net::ReadTimeout + raise TimeoutError, + 'Timeout while connecting to NWS web service' + rescue SocketError, Errno::ECONNREFUSED, Errno::ECONNRESET + raise HttpError, + 'Could not connect to NWS web service' + end + + def build_uri + url = @options[:url] || URL + uri = URI(url) + if @options[:area] + params = URI.decode_www_form(uri.query || '') + params << ['area', @options[:area]] + uri.query = URI.encode_www_form(params) end + uri end - def process(entries) + def process(features) alerts = [] - entries.each do |entry| - alert = create_instance entry - alerts.push alert unless alert.nil? - errors.push entry if alert.nil? + features.each do |feature| + alert = create_instance(feature) + alerts.push(alert) unless alert.nil? + errors.push(feature) if alert.nil? end - alerts end - def create_instance(entry) - return if entry.xpath('cap:event').empty? + def create_instance(feature) + properties = feature['properties'] + return if properties.nil? || properties['event'].nil? alert = Alert.new - alert.parse entry + alert.parse(feature) alert end - - def namespaces - { 'xmlns' => 'http://www.w3.org/2005/Atom', - 'cap' => 'urn:oasis:names:tc:emergency:cap:1.1', - 'ha' => 'http://www.alerting.net/namespace/index_1.0' } - end end end diff --git a/lib/gull/error.rb b/lib/gull/error.rb index 59cea75..55daf7a 100644 --- a/lib/gull/error.rb +++ b/lib/gull/error.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'English' module Gull From 5f8649549803b0a93aebef984a5bd5848096b649 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:59:37 -0500 Subject: [PATCH 06/17] Migrate Alert to JSON parsing Parse GeoJSON Feature properties instead of XML elements. Map new API fields to existing attribute names. --- lib/gull/alert.rb | 99 +++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/lib/gull/alert.rb b/lib/gull/alert.rb index 784efd1..e34a042 100644 --- a/lib/gull/alert.rb +++ b/lib/gull/alert.rb @@ -1,80 +1,87 @@ -require 'httpclient' -require 'nokogiri' +# frozen_string_literal: true module Gull - # Gull represents an NWS/NOAA alert and provides the ability to fetch - # them from the public web service class Alert - attr_accessor :id, :title, :summary, :link, :alert_type, :polygon, :area, - :effective_at, :expires_at, :updated_at, :published_at, - :urgency, :severity, :certainty, :geocode, :vtec + attr_accessor :id, :title, :summary, :link, :alert_type, :polygon, + :area, :effective_at, :expires_at, :updated_at, + :published_at, :urgency, :severity, :certainty, + :geocode, :vtec def initialize self.geocode = Geocode.new end def self.fetch(options = {}) - client = Client.new options + client = Client.new(options) client.fetch end - def parse(element) - parse_core_attributes element - parse_times element - parse_categories element - - parse_polygon element.xpath('cap:polygon').inner_text - parse_geocode element.xpath('cap:geocode') - parse_vtec element.xpath('cap:parameter') + def parse(feature) + props = feature['properties'] + parse_core_attributes(feature, props) + parse_times(props) + parse_categories(props) + parse_polygon(feature) + parse_geocode(props) + parse_vtec(props) end private - def parse_core_attributes(element) - self.id = element.css('id').inner_text - self.title = element.css('title').inner_text - self.summary = element.css('summary').inner_text - self.link = parse_link element - self.alert_type = element.xpath('cap:event').inner_text - self.area = element.xpath('cap:areaDesc').inner_text + def parse_core_attributes(feature, props) + self.id = props['id'] + self.title = props['headline'] + self.summary = props['description'] + self.link = props['@id'] || feature['id'] + self.alert_type = props['event'] + self.area = props['areaDesc'] end - def parse_link(element) - link = element.css('link').first - link.attributes['href'].value unless link.nil? + def parse_times(props) + self.effective_at = Time.parse(props['effective']) + self.expires_at = Time.parse(props['expires']) + self.published_at = Time.parse(props['sent']) + self.updated_at = Time.parse(props['onset'] || props['sent']) end - def parse_times(element) - self.updated_at = Time.parse(element.css('updated').inner_text) - self.published_at = Time.parse(element.css('published').inner_text) - self.effective_at = Time.parse(element.xpath('cap:effective').inner_text) - self.expires_at = Time.parse(element.xpath('cap:expires').inner_text) + def parse_categories(props) + self.urgency = code_to_symbol(props['urgency']) + self.severity = code_to_symbol(props['severity']) + self.certainty = code_to_symbol(props['certainty']) end - def parse_categories(element) - self.urgency = code_to_symbol element.xpath('cap:urgency').inner_text - self.severity = code_to_symbol element.xpath('cap:severity').inner_text - self.certainty = code_to_symbol element.xpath('cap:certainty').inner_text - end + def parse_polygon(feature) + geometry = feature['geometry'] + return if geometry.nil? + + coords = geometry['coordinates'] + return if coords.nil? || coords.empty? - def parse_polygon(text) - return if text.empty? - self.polygon = Polygon.new text + self.polygon = Polygon.new(coords.first) end - def parse_geocode(element) - return if element.children.css('value').first.nil? + def parse_geocode(props) + geocode_data = props['geocode'] + return if geocode_data.nil? - geocode.fips6 = element.children.css('value').first.inner_text - geocode.ugc = element.children.css('value').last.inner_text + ugc = geocode_data['UGC'] + self.geocode.ugc = ugc&.join(' ') + + fips = geocode_data['SAME'] + self.geocode.fips6 = fips&.join(' ') end - def parse_vtec(element) - value = element.children.css('value').inner_text - self.vtec = value.empty? ? nil : value + def parse_vtec(props) + params = props['parameters'] + return if params.nil? + + vtec_values = params['VTEC'] + self.vtec = vtec_values&.first end def code_to_symbol(code) + return :unknown if code.nil? + code.tr(' ', '_').downcase.to_sym end end From b69bc3d717156f720608138b82e08953c4c8ac35 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:59:47 -0500 Subject: [PATCH 07/17] Update Polygon for GeoJSON coordinates Accept [lon, lat] arrays from GeoJSON geometry, convert to [lat, lon] internally. Fix Google Maps URL to HTTPS. --- lib/gull/polygon.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/gull/polygon.rb b/lib/gull/polygon.rb index 9eeff74..585c516 100644 --- a/lib/gull/polygon.rb +++ b/lib/gull/polygon.rb @@ -1,10 +1,11 @@ +# frozen_string_literal: true + module Gull class Polygon attr_accessor :coordinates - def initialize(polygon) - self.coordinates = polygon.split(' ') - .map { |point| point.split(',').map(&:to_f) } + def initialize(coords) + self.coordinates = coords.map { |point| [point[1], point[0]] } end def image_url(api_key, options = {}) @@ -17,18 +18,17 @@ def image_url(api_key, options = {}) maptype: 'roadmap' }.merge(options) - url_base = 'http://maps.googleapis.com/maps/api/staticmap' + url_base = 'https://maps.googleapis.com/maps/api/staticmap' "#{url_base}?size=#{options[:width]}x#{options[:height]}" \ - "&maptype=#{options[:maptype]}&path=color:#{options[:color]}" \ - "|weight:#{options[:weight]}|fillcolor:#{options[:fillcolor]}" \ - "|#{coordinates_piped}&key=#{api_key}" + "&maptype=#{options[:maptype]}&path=color:#{options[:color]}" \ + "|weight:#{options[:weight]}|fillcolor:#{options[:fillcolor]}" \ + "|#{coordinates_piped}&key=#{api_key}" end def to_s coordinates.map { |pair| pair.join(',') }.join(' ') end - # Returns well-known text (WKT) formatted polygon def to_wkt pairs = coordinates.map { |pair| "#{pair.last} #{pair.first}" } .join(', ') @@ -38,7 +38,7 @@ def to_wkt private def coordinates_piped - coordinates.map { |pair| pair.join ',' }.join '|' + coordinates.map { |pair| pair.join(',') }.join('|') end end end From 3e53d30146612c5705d89e833b7400be6b53022f Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Fri, 6 Mar 2026 23:59:56 -0500 Subject: [PATCH 08/17] Update module loader and Geocode Remove nokogiri/httpclient requires, add stdlib requires (json, net/http, time, uri). Add frozen_string_literal to Geocode. --- lib/gull.rb | 13 ++++++++++--- lib/gull/geocode.rb | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/gull.rb b/lib/gull.rb index 7c6508f..fcb365f 100644 --- a/lib/gull.rb +++ b/lib/gull.rb @@ -1,9 +1,16 @@ +# frozen_string_literal: true + +require 'json' +require 'net/http' +require 'time' +require 'uri' + require 'gull/version' require 'gull/error' -require 'gull/client' -require 'gull/alert' -require 'gull/polygon' require 'gull/geocode' +require 'gull/polygon' +require 'gull/alert' +require 'gull/client' module Gull end diff --git a/lib/gull/geocode.rb b/lib/gull/geocode.rb index 985a0a9..c2c99d4 100644 --- a/lib/gull/geocode.rb +++ b/lib/gull/geocode.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Gull class Geocode attr_accessor :fips6, :ugc From 41f13919fc6d9c7fd87f7bd766e16ea3adb9b2b1 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 00:07:17 -0500 Subject: [PATCH 09/17] Rewrite specs for new JSON API Replace XML fixtures with GeoJSON fixtures, update webmock stubs and assertions for api.weather.gov endpoint. --- spec/alert_spec.rb | 61 +++++----------- spec/client_spec.rb | 80 +++++++-------------- spec/error_spec.rb | 4 +- spec/fixtures/alerts.json | 108 ++++++++++++++++++++++++++++ spec/fixtures/alerts.xml | 118 ------------------------------- spec/fixtures/bad.xml | 1 - spec/fixtures/empty.json | 4 ++ spec/fixtures/empty.xml | 30 -------- spec/fixtures/missing_cap.xml | 46 ------------ spec/fixtures/missing_event.json | 21 ++++++ spec/polygon_spec.rb | 28 +++++--- 11 files changed, 196 insertions(+), 305 deletions(-) create mode 100644 spec/fixtures/alerts.json delete mode 100644 spec/fixtures/alerts.xml delete mode 100644 spec/fixtures/bad.xml create mode 100644 spec/fixtures/empty.json delete mode 100644 spec/fixtures/empty.xml delete mode 100644 spec/fixtures/missing_cap.xml create mode 100644 spec/fixtures/missing_event.json diff --git a/spec/alert_spec.rb b/spec/alert_spec.rb index a97384c..68f4b50 100644 --- a/spec/alert_spec.rb +++ b/spec/alert_spec.rb @@ -7,18 +7,17 @@ end it 'should fetch parsed alerts' do - xml = File.read 'spec/fixtures/alerts.xml' + json = File.read 'spec/fixtures/alerts.json' - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) alerts = Gull::Alert.fetch expect(alerts.size).to eq(3) first = alerts.first - expect(first.id).to eq 'http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory' - expect(first.link).to eq 'http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory' + expect(first.id).to eq 'urn:oid:2.49.0.1.840.0.1111' + expect(first.link).to eq 'https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111' expect(first.alert_type).to eq 'Heat Advisory' expect(first.title).to eq 'Heat Advisory issued October 01 at 8:40AM PDT' \ ' until October 03 at 9:00PM PDT by NWS' @@ -58,59 +57,33 @@ third = alerts[2] expect(third.vtec).to be_nil - expect(third.link).to be_nil end - it 'should fetch from url in options' do - xml = File.read 'spec/fixtures/alerts.xml' + it 'should fetch with area option' do + json = File.read 'spec/fixtures/alerts.json' - stub_request(:get, 'http://test.url') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active?area=OK') + .to_return(status: 200, body: json, headers: {}) - alerts = Gull::Alert.fetch(url: 'http://test.url') + alerts = Gull::Alert.fetch(area: 'OK') expect(alerts.size).to eq(3) end - it 'should enable strict xml parsing via option' do - xml = File.read 'spec/fixtures/bad.xml' - - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) - - expect { Gull::Alert.fetch(strict: true) } - .to raise_error(Nokogiri::XML::SyntaxError) - end - it 'should handle empty alerts' do - xml = File.read 'spec/fixtures/empty.xml' - - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) - - alerts = Gull::Alert.fetch - expect(alerts.size).to eq(0) - end - - it 'should handle bad response' do - xml = File.read 'spec/fixtures/bad.xml' + json = File.read 'spec/fixtures/empty.json' - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) alerts = Gull::Alert.fetch expect(alerts.size).to eq(0) end - it 'should handle missing cap section' do - xml = File.read 'spec/fixtures/missing_cap.xml' + it 'should handle missing event' do + json = File.read 'spec/fixtures/missing_event.json' - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) alerts = Gull::Alert.fetch expect(alerts.size).to eq 0 diff --git a/spec/client_spec.rb b/spec/client_spec.rb index f0211d1..b0732d2 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -2,31 +2,21 @@ describe Gull::Client do it 'should initialize with options' do - xml = File.read 'spec/fixtures/alerts.xml' - stub_request(:get, 'http://test.url') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + json = File.read 'spec/fixtures/alerts.json' + stub_request(:get, 'https://test.url/alerts') + .to_return(status: 200, body: json, headers: {}) - options = { url: 'http://test.url', strict: true } + options = { url: 'https://test.url/alerts' } client = Gull::Client.new(options) alerts = client.fetch expect(alerts.size).to eq 3 - - xml = File.read 'spec/fixtures/bad.xml' - stub_request(:get, 'http://test.url') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) - - expect { client.fetch } - .to raise_error(Nokogiri::XML::SyntaxError) end it 'should fetch alerts without options' do - xml = File.read 'spec/fixtures/alerts.xml' + json = File.read 'spec/fixtures/alerts.json' - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) client = Gull::Client.new alerts = client.fetch @@ -34,12 +24,11 @@ expect(client.errors.size).to eq 0 end - it 'should handle incomplete entries in xml' do - xml = File.read 'spec/fixtures/missing_cap.xml' + it 'should handle features with missing event' do + json = File.read 'spec/fixtures/missing_event.json' - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_return(status: 200, body: xml, headers: {}) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) client = Gull::Client.new alerts = client.fetch @@ -48,8 +37,7 @@ end it 'should raise own error if timeout occurs' do - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) + stub_request(:get, 'https://api.weather.gov/alerts/active') .to_timeout message = 'Timeout while connecting to NWS web service' @@ -57,31 +45,8 @@ expect { client.fetch }.to raise_error(Gull::TimeoutError, message) end - it 'should raise own error if http errors occur' do - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_raise(HTTPClient::KeepAliveDisconnected) - - message = 'Could not connect to NWS web service' - client = Gull::Client.new - expect { client.fetch }.to raise_error(Gull::HttpError, message) do |error| - expect(error.original).to be_a(HTTPClient::KeepAliveDisconnected) - end - - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) - .to_raise(HTTPClient::BadResponseError) - - message = 'Could not connect to NWS web service' - client = Gull::Client.new - expect { client.fetch }.to raise_error(Gull::HttpError, message) do |error| - expect(error.original).to be_a(HTTPClient::BadResponseError) - end - end - it 'should raise own error if connection errors occur' do - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) + stub_request(:get, 'https://api.weather.gov/alerts/active') .to_raise(SocketError) message = 'Could not connect to NWS web service' @@ -90,24 +55,31 @@ expect(error.original).to be_a(SocketError) end - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) + stub_request(:get, 'https://api.weather.gov/alerts/active') .to_raise(Errno::ECONNREFUSED) - message = 'Could not connect to NWS web service' client = Gull::Client.new expect { client.fetch }.to raise_error(Gull::HttpError, message) do |error| expect(error.original).to be_a(Errno::ECONNREFUSED) end - stub_request(:get, 'http://alerts.weather.gov/cap/us.php?x=1') - .with(headers: { 'Accept' => '*/*' }) + stub_request(:get, 'https://api.weather.gov/alerts/active') .to_raise(Errno::ECONNRESET) - message = 'Could not connect to NWS web service' client = Gull::Client.new expect { client.fetch }.to raise_error(Gull::HttpError, message) do |error| expect(error.original).to be_a(Errno::ECONNRESET) end end + + it 'should filter by area' do + json = File.read 'spec/fixtures/alerts.json' + + stub_request(:get, 'https://api.weather.gov/alerts/active?area=OK') + .to_return(status: 200, body: json, headers: {}) + + client = Gull::Client.new(area: 'OK') + alerts = client.fetch + expect(alerts.size).to eq 3 + end end diff --git a/spec/error_spec.rb b/spec/error_spec.rb index d2939e2..546f7bb 100644 --- a/spec/error_spec.rb +++ b/spec/error_spec.rb @@ -4,11 +4,11 @@ it 'should instantiate and set original with current exception' do error = StandardError.new 'inner' begin - fail error + raise error rescue StandardError http_error = Gull::HttpError.new 'test' expect(http_error.original).to eq error - expect(http_error.original.message). to eq 'inner' + expect(http_error.original.message).to eq 'inner' end end end diff --git a/spec/fixtures/alerts.json b/spec/fixtures/alerts.json new file mode 100644 index 0000000..dd9d737 --- /dev/null +++ b/spec/fixtures/alerts.json @@ -0,0 +1,108 @@ +{ + "@context": [ + "https://geojson.org/geojson-ld/geojson-context.jsonld", + { + "@version": "1.1", + "wx": "https://api.weather.gov/ontology#" + } + ], + "type": "FeatureCollection", + "features": [ + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [-81.79, 27.35], + [-81.89, 27.14], + [-81.97, 27.04], + [-82.02, 27.04], + [-81.97, 27.14], + [-81.86, 27.35], + [-81.79, 27.35] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111", + "id": "urn:oid:2.49.0.1.840.0.1111", + "areaDesc": "Southern Salinas Valley, Arroyo Seco and Lake San Antonio", + "geocode": {}, + "sent": "2014-10-01T08:40:00-07:06", + "effective": "2014-10-01T08:40:00-07:00", + "onset": "2014-10-01T08:40:00-07:05", + "expires": "2014-10-03T21:00:00-07:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Very Likely", + "urgency": "Expected", + "event": "Heat Advisory", + "headline": "Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS", + "description": "SUMMARY TEXT", + "parameters": { + "VTEC": ["/O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/"] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2222", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2222", + "id": "urn:oid:2.49.0.1.840.0.2222", + "areaDesc": "Coastal North Bay Including Point Reyes National Seashore", + "geocode": { + "SAME": ["006001", "006013", "006041", "006053", "006055", "006069", "006075", "006081", "006085", "006087", "006097"], + "UGC": ["CAZ006", "CAZ505", "CAZ506", "CAZ507", "CAZ508", "CAZ509", "CAZ510", "CAZ511", "CAZ512", "CAZ513", "CAZ516", "CAZ517", "CAZ518", "CAZ528", "CAZ529", "CAZ530"] + }, + "sent": "2014-10-01T08:40:00-07:00", + "effective": "2014-10-01T08:40:00-07:00", + "onset": "2014-10-01T08:40:00-07:00", + "expires": "2014-10-03T21:00:00-07:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Advisory", + "headline": "Flood Advisory issued October 01", + "description": "Flood advisory details", + "parameters": {} + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3333", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3333", + "id": "urn:oid:2.49.0.1.840.0.3333", + "areaDesc": "Some Area", + "geocode": { + "SAME": ["006001"], + "UGC": ["CAZ006"] + }, + "sent": "2014-10-01T08:40:00-07:00", + "effective": "2014-10-01T08:40:00-07:00", + "onset": "2014-10-01T08:40:00-07:00", + "expires": "2014-10-03T21:00:00-07:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Likely", + "urgency": "Expected", + "event": "Tornado Warning", + "headline": "Tornado Warning issued October 01", + "description": "Tornado warning details", + "parameters": {} + } + } + ] +} diff --git a/spec/fixtures/alerts.xml b/spec/fixtures/alerts.xml deleted file mode 100644 index c6fdb86..0000000 --- a/spec/fixtures/alerts.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -http://alerts.weather.gov/cap/us.atom -http://alerts.weather.gov/images/xml_logo.gif -NWS CAP Server -2014-10-01T11:05:00-05:00 - -w-nws.webmaster@noaa.gov - -Current Watches, Warnings and Advisories for the United States Issued by the National Weather Service - - - - http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory - 2014-10-01T08:40:00-07:05 - 2014-10-01T08:40:00-07:06 - - w-nws.webmaster@noaa.gov - - Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS - - SUMMARY TEXT - Heat Advisory - 2014-10-01T08:40:00-07:00 - 2014-10-03T21:00:00-07:00 - Actual - Alert - Met - Expected - Minor - Very Likely - Southern Salinas Valley, Arroyo Seco and Lake San Antonio - 27.35,-81.79 27.14,-81.89 27.04,-81.97 27.04,-82.02 27.14,-81.97 27.35,-81.86 27.35,-81.79 - - - - VTEC - /O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/ - - - - - http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory.125171642740CA.MTRNPWMTR.64d60221994d798a87b4862623e0d63c - 2014-10-01T08:40:00-07:00 - 2014-10-01T08:40:00-07:00 - - w-nws.webmaster@noaa.gov - - Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS - - ...VERY WARM WEATHER EXPECTED ACROSS OUR ENTIRE AREA STARTING ON THURSDAY... .A RIDGE OF HIGH PRESSURE COMBINED WITH OFFSHORE WINDS AND WARM TEMPERATURES WILL LEAD TO MUCH ABOVE NORMAL TEMPERATURES ACROSS OUR AREA.. ...HEAT ADVISORY IN EFFECT FROM NOON THURSDAY TO 9 PM PDT FRIDAY... - Flood Advisory - 2014-10-01T08:40:00-07:00 - 2014-10-03T21:00:00-07:00 - Actual - Alert - Met - Expected - Minor - Likely - Coastal North Bay Including Point Reyes National Seashore; East Bay Hills and the Diablo Range; East Bay Interior Valleys; Mountains Of San Benito County And Interior Monterey County Including Pinnacles National Monument; North Bay Interior Valleys; North Bay Mountains; Northern Monterey Bay; Northern Salinas Valley, Hollister Valley and Carmel Valley; San Francisco; San Francisco Bay Shoreline; San Fransisco Peninsula Coast; Santa Clara Valley Including San Jose; Santa Cruz Mountains; Santa Lucia Mountains and Los Padres National Forest; Southern Monterey Bay and Big Sur Coast; Southern Salinas Valley, Arroyo Seco and Lake San Antonio - - - FIPS6 - 006001 006013 006041 006053 006055 006069 006075 006081 006085 006087 006097 - UGC - CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 CAZ509 CAZ510 CAZ511 CAZ512 CAZ513 CAZ516 CAZ517 CAZ518 CAZ528 CAZ529 CAZ530 - - - - - - - http://alerts.weather.gov/cap/wwacapget.php?x=CA125171381DD0.HeatAdvisory.125171642740CA.MTRNPWMTR.64d60221994d798a87b4862623e0d63c - 2014-10-01T08:40:00-07:00 - 2014-10-01T08:40:00-07:00 - - w-nws.webmaster@noaa.gov - - Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS - ...VERY WARM WEATHER EXPECTED ACROSS OUR ENTIRE AREA STARTING ON THURSDAY... .A RIDGE OF HIGH PRESSURE COMBINED WITH OFFSHORE WINDS AND WARM TEMPERATURES WILL LEAD TO MUCH ABOVE NORMAL TEMPERATURES ACROSS OUR AREA.. ...HEAT ADVISORY IN EFFECT FROM NOON THURSDAY TO 9 PM PDT FRIDAY... - Tornado Warning - 2014-10-01T08:40:00-07:00 - 2014-10-03T21:00:00-07:00 - Actual - Alert - Met - Expected - Minor - Likely - Coastal North Bay Including Point Reyes National Seashore; East Bay Hills and the Diablo Range; East Bay Interior Valleys; Mountains Of San Benito County And Interior Monterey County Including Pinnacles National Monument; North Bay Interior Valleys; North Bay Mountains; Northern Monterey Bay; Northern Salinas Valley, Hollister Valley and Carmel Valley; San Francisco; San Francisco Bay Shoreline; San Fransisco Peninsula Coast; Santa Clara Valley Including San Jose; Santa Cruz Mountains; Santa Lucia Mountains and Los Padres National Forest; Southern Monterey Bay and Big Sur Coast; Southern Salinas Valley, Arroyo Seco and Lake San Antonio - - - FIPS6 - 006001 006013 006041 006053 006055 006069 006075 006081 006085 006087 006097 - UGC - CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 CAZ509 CAZ510 CAZ511 CAZ512 CAZ513 CAZ516 CAZ517 CAZ518 CAZ528 CAZ529 CAZ530 - - - diff --git a/spec/fixtures/bad.xml b/spec/fixtures/bad.xml deleted file mode 100644 index ba32853..0000000 --- a/spec/fixtures/bad.xml +++ /dev/null @@ -1 +0,0 @@ -? cannot read /www1/cap_atom/web/cap/us.atom \ No newline at end of file diff --git a/spec/fixtures/empty.json b/spec/fixtures/empty.json new file mode 100644 index 0000000..8b3698f --- /dev/null +++ b/spec/fixtures/empty.json @@ -0,0 +1,4 @@ +{ + "type": "FeatureCollection", + "features": [] +} diff --git a/spec/fixtures/empty.xml b/spec/fixtures/empty.xml deleted file mode 100644 index fad6cee..0000000 --- a/spec/fixtures/empty.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - -http://alerts.weather.gov/cap/us.atom -http://alerts.weather.gov/images/xml_logo.gif -NWS CAP Server -2014-10-01T11:05:00-05:00 - -w-nws.webmaster@noaa.gov - -Current Watches, Warnings and Advisories for the United States Issued by the National Weather Service - - \ No newline at end of file diff --git a/spec/fixtures/missing_cap.xml b/spec/fixtures/missing_cap.xml deleted file mode 100644 index bfab974..0000000 --- a/spec/fixtures/missing_cap.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - -http://alerts.weather.gov/cap/us.atom -http://alerts.weather.gov/images/xml_logo.gif -NWS CAP Server -2015-06-20T08:23:00-05:00 - -w-nws.webmaster@noaa.gov - -Current Watches, Warnings and Advisories for the United States Issued by the National Weather Service - - - - http://alerts.weather.gov/cap/wwacapget.php?x=LA1253AE8E0B98.FloodWarning.1253AEBAFBE4LA.SHVFLSSHV.3908c4d415c0ed7efa65ce2f6eea425e - 2015-06-20T08:02:00-05:00 - 2015-06-20T08:02:00-05:00 - - w-nws.webmaster@noaa.gov - - Flood Warning issued June 20 at 8:02AM CDT until June 23 at 2:53AM CDT by NWS - - The flood warning continues for the Red Chute Bayou At Sligo, Louisiana. * until late Monday night...or until the warning is cancelled. * At 70 AM Saturday the stage was 32.0 feet. * Minor flooding is occurring and minor flooding is forecast. * Flood stage is 31 feet. - - - diff --git a/spec/fixtures/missing_event.json b/spec/fixtures/missing_event.json new file mode 100644 index 0000000..f5e69c8 --- /dev/null +++ b/spec/fixtures/missing_event.json @@ -0,0 +1,21 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9999", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9999", + "id": "urn:oid:2.49.0.1.840.0.9999", + "areaDesc": "Some area", + "event": null, + "headline": "Test", + "description": "Test", + "sent": "2014-10-01T08:40:00-07:00", + "effective": "2014-10-01T08:40:00-07:00", + "expires": "2014-10-03T21:00:00-07:00" + } + } + ] +} diff --git a/spec/polygon_spec.rb b/spec/polygon_spec.rb index c371c64..d09adf5 100644 --- a/spec/polygon_spec.rb +++ b/spec/polygon_spec.rb @@ -2,20 +2,21 @@ describe Gull::Polygon do it 'should return static map image url' do - polygon = Gull::Polygon.new '34.57,-97.56 34.77,-97.38 34.75,-97.17' + coords = [[-97.56, 34.57], [-97.38, 34.77], [-97.17, 34.75]] + polygon = Gull::Polygon.new coords api_key = 'testkey' options = { width: 600, height: 300, color: '0xfbf000', weight: 4, fillcolor: '0xfbf00070', maptype: 'hybrid' } url = polygon.image_url api_key, options - expected_url = 'http://maps.googleapis.com/maps/api/staticmap?' \ + expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ 'size=600x300&maptype=hybrid&path=color:0xfbf000' \ '|weight:4|fillcolor:0xfbf00070|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ '&key=testkey' expect(url).to eq expected_url url = polygon.image_url api_key - expected_url = 'http://maps.googleapis.com/maps/api/staticmap?' \ + expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ 'size=640x640&maptype=roadmap&path=color:0xff0000' \ '|weight:3|fillcolor:0xff000060|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ '&key=testkey' @@ -23,23 +24,30 @@ end it 'should return original string representation' do - text = '34.57,-97.56 34.77,-97.38 34.75,-97.17 ' \ + coords = [[-97.56, 34.57], [-97.38, 34.77], [-97.17, 34.75], + [-97.11, 34.64], [-97.14, 34.64], [-97.14, 34.62], + [-97.2, 34.62], [-97.19, 34.6], [-97.17, 34.59], + [-97.17, 34.57], [-97.3, 34.5], [-97.56, 34.51], + [-97.56, 34.57]] + polygon = Gull::Polygon.new coords + expected = '34.57,-97.56 34.77,-97.38 34.75,-97.17 ' \ '34.64,-97.11 34.64,-97.14 34.62,-97.14 34.62,-97.2 34.6,-97.19 34.59,' \ '-97.17 34.57,-97.17 34.5,-97.3 34.51,-97.56 34.57,-97.56' - polygon = Gull::Polygon.new text - expect(polygon.to_s).to eq text + expect(polygon.to_s).to eq expected end it 'should output polygons in WKT format' do - text = '34.57,-97.56 34.77,-97.38 34.75,-97.17 ' \ - '34.64,-97.11 34.64,-97.14 34.62,-97.14 34.62,-97.2 34.6,-97.19 34.59,' \ - '-97.17 34.57,-97.17 34.5,-97.3 34.51,-97.56 34.57,-97.56' + coords = [[-97.56, 34.57], [-97.38, 34.77], [-97.17, 34.75], + [-97.11, 34.64], [-97.14, 34.64], [-97.14, 34.62], + [-97.2, 34.62], [-97.19, 34.6], [-97.17, 34.59], + [-97.17, 34.57], [-97.3, 34.5], [-97.56, 34.51], + [-97.56, 34.57]] + polygon = Gull::Polygon.new coords wkt_text = 'POLYGON((-97.56 34.57, -97.38 34.77, -97.17 34.75,' \ ' -97.11 34.64, -97.14 34.64, -97.14 34.62, -97.2 34.62, -97.19 34.6,' \ ' -97.17 34.59, -97.17 34.57, -97.3 34.5, -97.56 34.51, -97.56 34.57))' - polygon = Gull::Polygon.new text expect(polygon.to_wkt).to eq wkt_text end end From 09cf388555a21b658ea9dcb1c05a3447574ff4e4 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 00:07:25 -0500 Subject: [PATCH 10/17] Add frozen_string_literal to remaining files --- Rakefile | 2 ++ lib/gull/version.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Rakefile b/Rakefile index 2922906..25864e6 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'bundler/gem_tasks' require 'rspec/core/rake_task' diff --git a/lib/gull/version.rb b/lib/gull/version.rb index 56f7e63..c6c209c 100644 --- a/lib/gull/version.rb +++ b/lib/gull/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Gull VERSION = '0.4.0' end From b768441b27db8ae40eec92f9630e935270c1d0aa Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 00:07:46 -0500 Subject: [PATCH 11/17] Run rubocop autocorrect Add frozen_string_literal pragmas, fix string concatenation indentation, freeze mutable constant, disable Documentation cop. --- .rubocop.yml | 2 ++ Gemfile | 2 ++ lib/gull/alert.rb | 4 ++-- lib/gull/client.rb | 2 +- spec/alert_spec.rb | 14 ++++++++------ spec/client_spec.rb | 2 ++ spec/error_spec.rb | 2 ++ spec/polygon_spec.rb | 24 +++++++++++++----------- 8 files changed, 32 insertions(+), 20 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index da8e6fa..38af61f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -32,5 +32,7 @@ Style/StringLiterals: Style/StringConcatenation: Exclude: - 'spec/**/*' +Style/Documentation: + Enabled: false Naming/PredicateMethod: Enabled: false diff --git a/Gemfile b/Gemfile index 44b94e9..ae61ec6 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source 'https://rubygems.org' # Specify your gem's dependencies in gull.gemspec diff --git a/lib/gull/alert.rb b/lib/gull/alert.rb index e34a042..7a05519 100644 --- a/lib/gull/alert.rb +++ b/lib/gull/alert.rb @@ -65,10 +65,10 @@ def parse_geocode(props) return if geocode_data.nil? ugc = geocode_data['UGC'] - self.geocode.ugc = ugc&.join(' ') + geocode.ugc = ugc&.join(' ') fips = geocode_data['SAME'] - self.geocode.fips6 = fips&.join(' ') + geocode.fips6 = fips&.join(' ') end def parse_vtec(props) diff --git a/lib/gull/client.rb b/lib/gull/client.rb index 243096a..5ee4719 100644 --- a/lib/gull/client.rb +++ b/lib/gull/client.rb @@ -3,7 +3,7 @@ module Gull class Client URL = 'https://api.weather.gov/alerts/active' - USER_AGENT = "gull/#{VERSION} (Ruby #{RUBY_VERSION})" + USER_AGENT = "gull/#{VERSION} (Ruby #{RUBY_VERSION})".freeze attr_accessor :errors diff --git a/spec/alert_spec.rb b/spec/alert_spec.rb index 68f4b50..217b268 100644 --- a/spec/alert_spec.rb +++ b/spec/alert_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Gull::Alert do @@ -19,8 +21,8 @@ expect(first.id).to eq 'urn:oid:2.49.0.1.840.0.1111' expect(first.link).to eq 'https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111' expect(first.alert_type).to eq 'Heat Advisory' - expect(first.title).to eq 'Heat Advisory issued October 01 at 8:40AM PDT' \ - ' until October 03 at 9:00PM PDT by NWS' + expect(first.title).to eq 'Heat Advisory issued October 01 at 8:40AM PDT ' \ + 'until October 03 at 9:00PM PDT by NWS' expect(first.summary).to eq 'SUMMARY TEXT' coordinates = [[27.35, -81.79], [27.14, -81.89], [27.04, -81.97], @@ -34,7 +36,7 @@ expect(first.published_at).to eq Time.parse('2014-10-01T08:40:00-07:06') expect(first.area).to eq 'Southern Salinas Valley, Arroyo Seco and Lake ' \ - 'San Antonio' + 'San Antonio' expect(first.urgency).to eq :expected expect(first.severity).to eq :minor expect(first.certainty).to eq :very_likely @@ -48,10 +50,10 @@ expect(second.polygon).to be_nil expect(second.geocode.fips6).to eq '006001 006013 006041 006053 006055 ' \ - '006069 006075 006081 006085 006087 006097' + '006069 006075 006081 006085 006087 006097' expect(second.geocode.ugc).to eq 'CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 ' \ - 'CAZ509 CAZ510 CAZ511 CAZ512 CAZ513 CAZ516 CAZ517 CAZ518 CAZ528 ' \ - 'CAZ529 CAZ530' + 'CAZ509 CAZ510 CAZ511 CAZ512 CAZ513 CAZ516 CAZ517 CAZ518 CAZ528 ' \ + 'CAZ529 CAZ530' expect(second.vtec).to be_nil diff --git a/spec/client_spec.rb b/spec/client_spec.rb index b0732d2..75c3a14 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Gull::Client do diff --git a/spec/error_spec.rb b/spec/error_spec.rb index 546f7bb..6b580ea 100644 --- a/spec/error_spec.rb +++ b/spec/error_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Gull::HttpError do diff --git a/spec/polygon_spec.rb b/spec/polygon_spec.rb index d09adf5..929ee9e 100644 --- a/spec/polygon_spec.rb +++ b/spec/polygon_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Gull::Polygon do @@ -10,16 +12,16 @@ fillcolor: '0xfbf00070', maptype: 'hybrid' } url = polygon.image_url api_key, options expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ - 'size=600x300&maptype=hybrid&path=color:0xfbf000' \ - '|weight:4|fillcolor:0xfbf00070|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ - '&key=testkey' + 'size=600x300&maptype=hybrid&path=color:0xfbf000' \ + '|weight:4|fillcolor:0xfbf00070|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ + '&key=testkey' expect(url).to eq expected_url url = polygon.image_url api_key expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ - 'size=640x640&maptype=roadmap&path=color:0xff0000' \ - '|weight:3|fillcolor:0xff000060|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ - '&key=testkey' + 'size=640x640&maptype=roadmap&path=color:0xff0000' \ + '|weight:3|fillcolor:0xff000060|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ + '&key=testkey' expect(url).to eq expected_url end @@ -31,8 +33,8 @@ [-97.56, 34.57]] polygon = Gull::Polygon.new coords expected = '34.57,-97.56 34.77,-97.38 34.75,-97.17 ' \ - '34.64,-97.11 34.64,-97.14 34.62,-97.14 34.62,-97.2 34.6,-97.19 34.59,' \ - '-97.17 34.57,-97.17 34.5,-97.3 34.51,-97.56 34.57,-97.56' + '34.64,-97.11 34.64,-97.14 34.62,-97.14 34.62,-97.2 34.6,-97.19 34.59,' \ + '-97.17 34.57,-97.17 34.5,-97.3 34.51,-97.56 34.57,-97.56' expect(polygon.to_s).to eq expected end @@ -44,9 +46,9 @@ [-97.56, 34.57]] polygon = Gull::Polygon.new coords - wkt_text = 'POLYGON((-97.56 34.57, -97.38 34.77, -97.17 34.75,' \ - ' -97.11 34.64, -97.14 34.64, -97.14 34.62, -97.2 34.62, -97.19 34.6,' \ - ' -97.17 34.59, -97.17 34.57, -97.3 34.5, -97.56 34.51, -97.56 34.57))' + wkt_text = 'POLYGON((-97.56 34.57, -97.38 34.77, -97.17 34.75, ' \ + '-97.11 34.64, -97.14 34.64, -97.14 34.62, -97.2 34.62, -97.19 34.6, ' \ + '-97.17 34.59, -97.17 34.57, -97.3 34.5, -97.56 34.51, -97.56 34.57))' expect(polygon.to_wkt).to eq wkt_text end From d1040b26bc1cefc128ae1ab44675f313b2f3d4d9 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 08:42:06 -0500 Subject: [PATCH 12/17] Fix transport and polygon parsing regressions Raise HttpError on non-2xx API responses instead of silently returning empty results. Derive SSL from URI scheme. Handle MultiPolygon geometry type. Drop url option (use area instead). --- lib/gull/alert.rb | 4 ++- lib/gull/client.rb | 9 +++-- spec/alert_spec.rb | 13 +++++++ spec/client_spec.rb | 21 +++++------ spec/fixtures/multipolygon_alert.json | 50 +++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 spec/fixtures/multipolygon_alert.json diff --git a/lib/gull/alert.rb b/lib/gull/alert.rb index 7a05519..03eb7db 100644 --- a/lib/gull/alert.rb +++ b/lib/gull/alert.rb @@ -57,7 +57,9 @@ def parse_polygon(feature) coords = geometry['coordinates'] return if coords.nil? || coords.empty? - self.polygon = Polygon.new(coords.first) + ring = coords.first + ring = ring.first if geometry['type'] == 'MultiPolygon' + self.polygon = Polygon.new(ring) end def parse_geocode(props) diff --git a/lib/gull/client.rb b/lib/gull/client.rb index 5ee4719..05da280 100644 --- a/lib/gull/client.rb +++ b/lib/gull/client.rb @@ -23,11 +23,15 @@ def fetch def response uri = build_uri http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true + http.use_ssl = uri.scheme == 'https' request = Net::HTTP::Get.new(uri) request['User-Agent'] = USER_AGENT request['Accept'] = 'application/geo+json' result = http.request(request) + unless result.is_a?(Net::HTTPSuccess) + raise HttpError, "NWS API returned #{result.code}" + end + result.body rescue Net::OpenTimeout, Net::ReadTimeout raise TimeoutError, @@ -38,8 +42,7 @@ def response end def build_uri - url = @options[:url] || URL - uri = URI(url) + uri = URI(URL) if @options[:area] params = URI.decode_www_form(uri.query || '') params << ['area', @options[:area]] diff --git a/spec/alert_spec.rb b/spec/alert_spec.rb index 217b268..1c67a87 100644 --- a/spec/alert_spec.rb +++ b/spec/alert_spec.rb @@ -71,6 +71,19 @@ expect(alerts.size).to eq(3) end + it 'should parse MultiPolygon geometry' do + json = File.read 'spec/fixtures/multipolygon_alert.json' + + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) + + alerts = Gull::Alert.fetch + first = alerts.first + coordinates = [[34.57, -97.56], [34.77, -97.38], + [34.75, -97.17], [34.57, -97.56]] + expect(first.polygon.coordinates).to eq coordinates + end + it 'should handle empty alerts' do json = File.read 'spec/fixtures/empty.json' diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 75c3a14..4a7914c 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -3,18 +3,7 @@ require 'spec_helper' describe Gull::Client do - it 'should initialize with options' do - json = File.read 'spec/fixtures/alerts.json' - stub_request(:get, 'https://test.url/alerts') - .to_return(status: 200, body: json, headers: {}) - - options = { url: 'https://test.url/alerts' } - client = Gull::Client.new(options) - alerts = client.fetch - expect(alerts.size).to eq 3 - end - - it 'should fetch alerts without options' do + it 'should fetch alerts' do json = File.read 'spec/fixtures/alerts.json' stub_request(:get, 'https://api.weather.gov/alerts/active') @@ -38,6 +27,14 @@ expect(client.errors.size).to eq 1 end + it 'should raise error on non-success response' do + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 503, body: '{"title":"Service Unavailable"}', headers: {}) + + client = Gull::Client.new + expect { client.fetch }.to raise_error(Gull::HttpError, 'NWS API returned 503') + end + it 'should raise own error if timeout occurs' do stub_request(:get, 'https://api.weather.gov/alerts/active') .to_timeout diff --git a/spec/fixtures/multipolygon_alert.json b/spec/fixtures/multipolygon_alert.json new file mode 100644 index 0000000..74be115 --- /dev/null +++ b/spec/fixtures/multipolygon_alert.json @@ -0,0 +1,50 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", + "type": "Feature", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [-97.56, 34.57], + [-97.38, 34.77], + [-97.17, 34.75], + [-97.56, 34.57] + ] + ], + [ + [ + [-96.0, 35.0], + [-95.8, 35.2], + [-95.6, 35.1], + [-96.0, 35.0] + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", + "id": "urn:oid:2.49.0.1.840.0.4444", + "areaDesc": "Central Oklahoma", + "geocode": {}, + "sent": "2014-10-01T08:40:00-07:00", + "effective": "2014-10-01T08:40:00-07:00", + "onset": "2014-10-01T08:40:00-07:00", + "expires": "2014-10-03T21:00:00-07:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Extreme", + "certainty": "Likely", + "urgency": "Immediate", + "event": "Tornado Warning", + "headline": "Tornado Warning issued October 01", + "description": "Tornado warning details", + "parameters": {} + } + } + ] +} From 44d0e22c0de4e408c5587fcd7d328d9da9724380 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 08:54:08 -0500 Subject: [PATCH 13/17] Replace hand-crafted fixtures with real API data Use 44 real alerts from AR, MO, AK covering polygons, null geometries, VTEC, geocodes, and varied severity/urgency/ certainty values. --- spec/alert_spec.rb | 190 +- spec/client_spec.rb | 4 +- spec/fixtures/alerts.json | 4883 ++++++++++++++++- spec/fixtures/features/blizzard_warning.json | 93 + spec/fixtures/features/empty_geocode.json | 34 + spec/fixtures/features/flood_advisory.json | 156 + spec/fixtures/features/flood_warning.json | 108 + spec/fixtures/features/multipolygon.json | 69 + spec/fixtures/features/null_geometry.json | 145 + spec/fixtures/features/polygon_no_vtec.json | 165 + spec/fixtures/features/polygon_with_vtec.json | 128 + spec/fixtures/multipolygon_alert.json | 50 - 12 files changed, 5852 insertions(+), 173 deletions(-) create mode 100644 spec/fixtures/features/blizzard_warning.json create mode 100644 spec/fixtures/features/empty_geocode.json create mode 100644 spec/fixtures/features/flood_advisory.json create mode 100644 spec/fixtures/features/flood_warning.json create mode 100644 spec/fixtures/features/multipolygon.json create mode 100644 spec/fixtures/features/null_geometry.json create mode 100644 spec/fixtures/features/polygon_no_vtec.json create mode 100644 spec/fixtures/features/polygon_with_vtec.json delete mode 100644 spec/fixtures/multipolygon_alert.json diff --git a/spec/alert_spec.rb b/spec/alert_spec.rb index 1c67a87..f17ef89 100644 --- a/spec/alert_spec.rb +++ b/spec/alert_spec.rb @@ -3,102 +3,160 @@ require 'spec_helper' describe Gull::Alert do + def load_feature(name) + JSON.parse(File.read("spec/fixtures/features/#{name}")) + end + + def wrap_features(*features) + { 'type' => 'FeatureCollection', 'features' => features }.to_json + end + + def stub_alerts(json) + stub_request(:get, 'https://api.weather.gov/alerts/active') + .to_return(status: 200, body: json, headers: {}) + end + it 'should initialize with geocode' do alert = Gull::Alert.new expect(alert.geocode).not_to be_nil end - it 'should fetch parsed alerts' do + it 'should fetch and parse all alerts' do json = File.read 'spec/fixtures/alerts.json' - - stub_request(:get, 'https://api.weather.gov/alerts/active') - .to_return(status: 200, body: json, headers: {}) + stub_alerts(json) alerts = Gull::Alert.fetch - expect(alerts.size).to eq(3) - - first = alerts.first - expect(first.id).to eq 'urn:oid:2.49.0.1.840.0.1111' - expect(first.link).to eq 'https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111' - expect(first.alert_type).to eq 'Heat Advisory' - expect(first.title).to eq 'Heat Advisory issued October 01 at 8:40AM PDT ' \ - 'until October 03 at 9:00PM PDT by NWS' - expect(first.summary).to eq 'SUMMARY TEXT' - - coordinates = [[27.35, -81.79], [27.14, -81.89], [27.04, -81.97], - [27.04, -82.02], [27.14, -81.97], [27.35, -81.86], - [27.35, -81.79]] - expect(first.polygon.coordinates).to eq coordinates - - expect(first.effective_at).to eq Time.parse('2014-10-01T08:40:00-07:00') - expect(first.expires_at).to eq Time.parse('2014-10-03T21:00:00-07:00') - expect(first.updated_at).to eq Time.parse('2014-10-01T08:40:00-07:05') - expect(first.published_at).to eq Time.parse('2014-10-01T08:40:00-07:06') - - expect(first.area).to eq 'Southern Salinas Valley, Arroyo Seco and Lake ' \ - 'San Antonio' - expect(first.urgency).to eq :expected - expect(first.severity).to eq :minor - expect(first.certainty).to eq :very_likely - - expect(first.geocode.fips6).to be_nil - expect(first.geocode.ugc).to be_nil - - expect(first.vtec).to eq '/O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/' - - second = alerts[1] - expect(second.polygon).to be_nil - - expect(second.geocode.fips6).to eq '006001 006013 006041 006053 006055 ' \ - '006069 006075 006081 006085 006087 006097' - expect(second.geocode.ugc).to eq 'CAZ006 CAZ505 CAZ506 CAZ507 CAZ508 ' \ - 'CAZ509 CAZ510 CAZ511 CAZ512 CAZ513 CAZ516 CAZ517 CAZ518 CAZ528 ' \ - 'CAZ529 CAZ530' - - expect(second.vtec).to be_nil - - third = alerts[2] - expect(third.vtec).to be_nil + expect(alerts.size).to eq(44) end - it 'should fetch with area option' do - json = File.read 'spec/fixtures/alerts.json' + it 'should parse alert with polygon and no VTEC' do + feature = load_feature('polygon_no_vtec.json') + stub_alerts(wrap_features(feature)) - stub_request(:get, 'https://api.weather.gov/alerts/active?area=OK') - .to_return(status: 200, body: json, headers: {}) + alert = Gull::Alert.fetch.first - alerts = Gull::Alert.fetch(area: 'OK') - expect(alerts.size).to eq(3) + expect(alert.id).to eq feature['properties']['id'] + expect(alert.link).to eq feature['properties']['@id'] + expect(alert.alert_type).to eq 'Special Weather Statement' + expect(alert.title).to start_with 'Special Weather Statement' + expect(alert.summary).to start_with 'At 748 AM CST' + expect(alert.area).to eq 'Sevier; Howard; Hempstead' + + expect(alert.effective_at).to eq Time.parse('2026-03-07T07:48:00-06:00') + expect(alert.expires_at).to eq Time.parse('2026-03-07T08:15:00-06:00') + expect(alert.published_at).to eq Time.parse('2026-03-07T07:48:00-06:00') + expect(alert.updated_at).to eq Time.parse('2026-03-07T07:48:00-06:00') + + expect(alert.urgency).to eq :expected + expect(alert.severity).to eq :moderate + expect(alert.certainty).to eq :observed + + expect(alert.polygon).not_to be_nil + expect(alert.polygon.coordinates.first).to eq [34.21, -93.93] + expect(alert.polygon.coordinates.size).to eq 18 + + expect(alert.geocode.fips6).to eq '005133 005061 005057' + expect(alert.geocode.ugc).to eq 'ARZ050 ARZ051 ARZ060' + + expect(alert.vtec).to be_nil + end + + it 'should parse alert with polygon and VTEC' do + feature = load_feature('polygon_with_vtec.json') + stub_alerts(wrap_features(feature)) + + alert = Gull::Alert.fetch.first + + expect(alert.alert_type).to eq 'Severe Thunderstorm Warning' + expect(alert.urgency).to eq :immediate + expect(alert.severity).to eq :severe + expect(alert.certainty).to eq :observed + expect(alert.polygon).not_to be_nil + expect(alert.polygon.coordinates.size).to eq 5 + expect(alert.vtec).to eq '/O.NEW.KLZK.SV.W.0013.260307T1328Z-260307T1415Z/' + end + + it 'should parse alert with null geometry' do + feature = load_feature('null_geometry.json') + stub_alerts(wrap_features(feature)) + + alert = Gull::Alert.fetch.first + + expect(alert.alert_type).to eq 'Tornado Watch' + expect(alert.urgency).to eq :future + expect(alert.severity).to eq :extreme + expect(alert.certainty).to eq :possible + expect(alert.polygon).to be_nil + expect(alert.geocode.ugc).not_to be_nil + expect(alert.geocode.fips6).not_to be_nil + expect(alert.vtec).to eq '/O.CON.KLZK.TO.A.0022.000000T0000Z-260307T1400Z/' + end + + it 'should parse flood advisory with minor severity' do + feature = load_feature('flood_advisory.json') + stub_alerts(wrap_features(feature)) + + alert = Gull::Alert.fetch.first + + expect(alert.alert_type).to eq 'Flood Advisory' + expect(alert.severity).to eq :minor + expect(alert.polygon).not_to be_nil + expect(alert.vtec).not_to be_nil + end + + it 'should parse blizzard warning with extreme severity' do + feature = load_feature('blizzard_warning.json') + stub_alerts(wrap_features(feature)) + + alert = Gull::Alert.fetch.first + + expect(alert.alert_type).to eq 'Blizzard Warning' + expect(alert.severity).to eq :extreme + expect(alert.polygon).to be_nil end it 'should parse MultiPolygon geometry' do - json = File.read 'spec/fixtures/multipolygon_alert.json' + feature = load_feature('multipolygon.json') + stub_alerts(wrap_features(feature)) - stub_request(:get, 'https://api.weather.gov/alerts/active') - .to_return(status: 200, body: json, headers: {}) + alert = Gull::Alert.fetch.first - alerts = Gull::Alert.fetch - first = alerts.first coordinates = [[34.57, -97.56], [34.77, -97.38], [34.75, -97.17], [34.57, -97.56]] - expect(first.polygon.coordinates).to eq coordinates + expect(alert.polygon.coordinates).to eq coordinates end - it 'should handle empty alerts' do - json = File.read 'spec/fixtures/empty.json' + it 'should handle empty geocode' do + feature = load_feature('empty_geocode.json') + stub_alerts(wrap_features(feature)) - stub_request(:get, 'https://api.weather.gov/alerts/active') + alert = Gull::Alert.fetch.first + + expect(alert.geocode.fips6).to be_nil + expect(alert.geocode.ugc).to be_nil + end + + it 'should fetch with area option' do + json = File.read 'spec/fixtures/alerts.json' + + stub_request(:get, 'https://api.weather.gov/alerts/active?area=OK') .to_return(status: 200, body: json, headers: {}) + alerts = Gull::Alert.fetch(area: 'OK') + expect(alerts.size).to eq(44) + end + + it 'should handle empty alerts' do + json = File.read 'spec/fixtures/empty.json' + stub_alerts(json) + alerts = Gull::Alert.fetch expect(alerts.size).to eq(0) end it 'should handle missing event' do json = File.read 'spec/fixtures/missing_event.json' - - stub_request(:get, 'https://api.weather.gov/alerts/active') - .to_return(status: 200, body: json, headers: {}) + stub_alerts(json) alerts = Gull::Alert.fetch expect(alerts.size).to eq 0 diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 4a7914c..f116be6 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -11,7 +11,7 @@ client = Gull::Client.new alerts = client.fetch - expect(alerts.size).to eq 3 + expect(alerts.size).to eq 44 expect(client.errors.size).to eq 0 end @@ -79,6 +79,6 @@ client = Gull::Client.new(area: 'OK') alerts = client.fetch - expect(alerts.size).to eq 3 + expect(alerts.size).to eq 44 end end diff --git a/spec/fixtures/alerts.json b/spec/fixtures/alerts.json index dd9d737..ca60db4 100644 --- a/spec/fixtures/alerts.json +++ b/spec/fixtures/alerts.json @@ -9,100 +9,4873 @@ "type": "FeatureCollection", "features": [ { - "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111", + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ - [-81.79, 27.35], - [-81.89, 27.14], - [-81.97, 27.04], - [-82.02, 27.04], - [-81.97, 27.14], - [-81.86, 27.35], - [-81.79, 27.35] + [ + -93.93, + 34.21 + ], + [ + -93.93, + 34.19 + ], + [ + -93.82, + 34.18 + ], + [ + -93.82, + 34.01 + ], + [ + -93.75, + 34.01 + ], + [ + -93.68, + 33.98 + ], + [ + -93.65, + 33.98 + ], + [ + -93.62, + 33.96 + ], + [ + -93.59, + 33.96 + ], + [ + -93.54, + 33.95 + ], + [ + -93.53, + 33.95 + ], + [ + -93.53, + 33.94 + ], + [ + -93.47, + 33.96 + ], + [ + -93.46, + 33.96 + ], + [ + -93.46, + 33.95 + ], + [ + -94, + 33.85 + ], + [ + -94.13, + 33.99 + ], + [ + -93.93, + 34.21 + ] ] ] }, "properties": { - "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.1111", - "id": "urn:oid:2.49.0.1.840.0.1111", - "areaDesc": "Southern Salinas Valley, Arroyo Seco and Lake San Antonio", - "geocode": {}, - "sent": "2014-10-01T08:40:00-07:06", - "effective": "2014-10-01T08:40:00-07:00", - "onset": "2014-10-01T08:40:00-07:05", - "expires": "2014-10-03T21:00:00-07:00", + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", + "areaDesc": "Sevier; Howard; Hempstead", + "geocode": { + "SAME": [ + "005133", + "005061", + "005057" + ], + "UGC": [ + "ARZ050", + "ARZ051", + "ARZ060" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/ARZ050", + "https://api.weather.gov/zones/forecast/ARZ051", + "https://api.weather.gov/zones/forecast/ARZ060" + ], + "references": [], + "sent": "2026-03-07T07:48:00-06:00", + "effective": "2026-03-07T07:48:00-06:00", + "onset": "2026-03-07T07:48:00-06:00", + "expires": "2026-03-07T08:15:00-06:00", + "ends": null, + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Observed", + "urgency": "Expected", + "event": "Special Weather Statement", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Shreveport LA", + "headline": "Special Weather Statement issued March 7 at 7:48AM CST by NWS Shreveport LA", + "description": "At 748 AM CST, Doppler radar was tracking a strong thunderstorm 8\nmiles southwest of Center Point, or 7 miles northwest of Mineral\nSprings, moving northeast at 40 mph.\n\nHAZARD...Wind gusts up to 40 mph and half inch size hail.\n\nSOURCE...Radar indicated.\n\nIMPACT...Gusty winds could knock down tree limbs and blow around\nunsecured objects. Minor damage to outdoor objects is\npossible.\n\nLocations impacted include...\nNashville, Mineral Springs, Dierks, Corinth, Center Point,\nMcCaskill, Muddy Fork and Silver Ridge.", + "instruction": "Monitor the weather situation closely and be alert for threatening\nweather conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "SPSSHV" + ], + "WMOidentifier": [ + "WWUS84 KSHV 071348" + ], + "NWSheadline": [ + "A STRONG THUNDERSTORM WILL IMPACT NORTHEASTERN HEMPSTEAD... SOUTHEASTERN HOWARD AND EAST CENTRAL SEVIER COUNTIES UNTIL 815 AM CST" + ], + "eventMotionDescription": [ + "2026-03-07T13:48:00-00:00...storm...233DEG...33KT...33.95,-94.02" + ], + "maxWindGust": [ + "40 MPH" + ], + "maxHailSize": [ + "0.50" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SPS" + ], + "NationalWeatherService": [ + "SPS" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.911c59ace6c95d63179d533ef87aabfc3fa71733.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.51, + 35.02 + ], + [ + -91.61, + 34.64 + ], + [ + -91.86, + 34.39 + ], + [ + -92.53, + 34.63 + ], + [ + -92.25, + 34.84 + ], + [ + -92.15, + 35.12 + ], + [ + -91.51, + 35.02 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.911c59ace6c95d63179d533ef87aabfc3fa71733.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.911c59ace6c95d63179d533ef87aabfc3fa71733.001.1", + "areaDesc": "Faulkner; White; Saline; Pulaski; Lonoke; Prairie; Jefferson", + "geocode": { + "SAME": [ + "005045", + "005145", + "005125", + "005119", + "005085", + "005117", + "005069" + ], + "UGC": [ + "ARZ032", + "ARZ033", + "ARZ043", + "ARZ044", + "ARZ045", + "ARZ046", + "ARZ056" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/ARZ032", + "https://api.weather.gov/zones/forecast/ARZ033", + "https://api.weather.gov/zones/forecast/ARZ043", + "https://api.weather.gov/zones/forecast/ARZ044", + "https://api.weather.gov/zones/forecast/ARZ045", + "https://api.weather.gov/zones/forecast/ARZ046", + "https://api.weather.gov/zones/forecast/ARZ056" + ], + "references": [], + "sent": "2026-03-07T07:48:00-06:00", + "effective": "2026-03-07T07:48:00-06:00", + "onset": "2026-03-07T07:48:00-06:00", + "expires": "2026-03-07T08:30:00-06:00", + "ends": null, + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Observed", + "urgency": "Expected", + "event": "Special Weather Statement", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Special Weather Statement issued March 7 at 7:48AM CST by NWS Little Rock AR", + "description": "At 747 AM CST, Doppler radar was tracking strong thunderstorms along\na line extending from near Austin in Lonoke County to near McAlmont\nto Mabelvale. Movement was east at 60 mph.\n\nHAZARD...Wind gusts up to 50 mph.\n\nSOURCE...Radar indicated.\n\nIMPACT...Gusty winds could knock down tree limbs and blow around\nunsecured objects.\n\nLocations impacted include...\nLittle Rock... North Little Rock...\nSherwood... Jacksonville...\nCabot... Bryant...\nDowntown Little Rock... Lonoke...\nDes Arc... Hazen...\nNorth Little Rock Airport... Little Rock AFB...\nSouthwest Little Rock... Beebe...\nWard... Shannon Hills...\nEngland... Carlisle...\nWrightsville... Austin in Lonoke County...", + "instruction": "If outdoors, consider seeking shelter inside a building.\n\nA Tornado Watch remains in effect until 800 AM CST for central\nArkansas.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "SPSLZK" + ], + "WMOidentifier": [ + "WWUS84 KLZK 071348" + ], + "NWSheadline": [ + "Strong thunderstorms will impact portions of western Prairie, Lonoke, east central Faulkner, southwestern White, north central Jefferson, east central Saline and eastern Pulaski Counties through 830 AM CST" + ], + "eventMotionDescription": [ + "2026-03-07T13:47:00-00:00...storm...286DEG...51KT...35.06,-92.05 34.82,-92.16 34.66,-92.37" + ], + "maxWindGust": [ + "50 MPH" + ], + "maxHailSize": [ + "0.00" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SPS" + ], + "NationalWeatherService": [ + "SPS" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.75, + 35.85 + ], + [ + -91.82, + 35.99 + ], + [ + -91.25, + 36.29 + ], + [ + -91.03, + 36.05 + ], + [ + -91.75, + 35.85 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "areaDesc": "Independence, AR; Izard, AR; Lawrence, AR; Randolph, AR; Sharp, AR", + "geocode": { + "SAME": [ + "005063", + "005065", + "005075", + "005121", + "005135" + ], + "UGC": [ + "ARC063", + "ARC065", + "ARC075", + "ARC121", + "ARC135" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC063", + "https://api.weather.gov/zones/county/ARC065", + "https://api.weather.gov/zones/county/ARC075", + "https://api.weather.gov/zones/county/ARC121", + "https://api.weather.gov/zones/county/ARC135" + ], + "references": [], + "sent": "2026-03-07T07:28:00-06:00", + "effective": "2026-03-07T07:28:00-06:00", + "onset": "2026-03-07T07:28:00-06:00", + "expires": "2026-03-07T08:15:00-06:00", + "ends": "2026-03-07T08:15:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Observed", + "urgency": "Immediate", + "event": "Severe Thunderstorm Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Severe Thunderstorm Warning issued March 7 at 7:28AM CST until March 7 at 8:15AM CST by NWS Little Rock AR", + "description": "SVRLZK\n\nThe National Weather Service in Little Rock has issued a\n\n* Severe Thunderstorm Warning for...\nNorthwestern Independence County in north central Arkansas...\nSouth central Randolph County in eastern Arkansas...\nSoutheastern Izard County in north central Arkansas...\nNorthwestern Lawrence County in eastern Arkansas...\nSouthern Sharp County in north central Arkansas...\n\n* Until 815 AM CST.\n\n* At 728 AM CST, a severe thunderstorm was located over Sidney, or 12\nmiles southeast of Melbourne, moving east at 50 mph.\n\nHAZARD...60 mph wind gusts.\n\nSOURCE...Radar indicated.\n\nIMPACT...Expect damage to roofs, siding, and trees.\n\n* Locations impacted include...\nBlack Rock... Lake Charles State Park...\nCave City... Imboden...\nRavenden... Cushman...\nPortia... Mount Pleasant...\nStrawberry... Lynn...\nSidney... Annieville...\nStella... Evening Shade...\nSmithville... Powhatan...\nAetna... Calamine...\nNelsonville... Sitka...", + "instruction": "A Tornado Watch remains in effect until 800 AM CST for north central\nArkansas.\n\nFor your protection move to an interior room on the lowest floor of a\nbuilding.\n\nA Tornado Watch remains in effect until 800 AM CST for north central\nArkansas.", + "response": "Shelter", + "parameters": { + "AWIPSidentifier": [ + "SVRLZK" + ], + "WMOidentifier": [ + "WUUS54 KLZK 071328" + ], + "eventMotionDescription": [ + "2026-03-07T13:28:00-00:00...storm...248DEG...42KT...35.97,-91.69" + ], + "windThreat": [ + "RADAR INDICATED" + ], + "maxWindGust": [ + "60 MPH" + ], + "hailThreat": [ + "RADAR INDICATED" + ], + "maxHailSize": [ + "Up to .75" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLZK.SV.W.0013.260307T1328Z-260307T1415Z/" + ], + "eventEndingTime": [ + "2026-03-07T08:15:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SVR" + ], + "NationalWeatherService": [ + "SVW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.844fc5d9640e41ee571aeedfd9fd1796d7c590e3.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -93.3, + 34.57 + ], + [ + -92.96, + 34.57 + ], + [ + -92.96, + 34.38 + ], + [ + -93.34, + 34.16 + ], + [ + -93.76, + 34.01 + ], + [ + -93.82, + 34.01 + ], + [ + -93.82, + 34.18 + ], + [ + -93.93, + 34.19 + ], + [ + -93.92, + 34.26 + ], + [ + -93.94, + 34.26 + ], + [ + -93.94, + 34.34 + ], + [ + -93.54, + 34.52 + ], + [ + -93.3, + 34.57 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.844fc5d9640e41ee571aeedfd9fd1796d7c590e3.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.844fc5d9640e41ee571aeedfd9fd1796d7c590e3.001.1", + "areaDesc": "Clark, AR; Garland, AR; Hot Spring, AR; Montgomery, AR; Pike, AR", + "geocode": { + "SAME": [ + "005019", + "005051", + "005059", + "005097", + "005109" + ], + "UGC": [ + "ARC019", + "ARC051", + "ARC059", + "ARC097", + "ARC109" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC019", + "https://api.weather.gov/zones/county/ARC051", + "https://api.weather.gov/zones/county/ARC059", + "https://api.weather.gov/zones/county/ARC097", + "https://api.weather.gov/zones/county/ARC109" + ], + "references": [], + "sent": "2026-03-07T07:27:00-06:00", + "effective": "2026-03-07T07:27:00-06:00", + "onset": "2026-03-07T07:27:00-06:00", + "expires": "2026-03-07T10:30:00-06:00", + "ends": "2026-03-07T10:30:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Immediate", + "event": "Flash Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Flash Flood Warning issued March 7 at 7:27AM CST until March 7 at 10:30AM CST by NWS Little Rock AR", + "description": "FFWLZK\n\nThe National Weather Service in Little Rock has issued a\n\n* Flash Flood Warning for...\nSouthwestern Garland County in central Arkansas...\nNorthwestern Clark County in southwestern Arkansas...\nWest Central Hot Spring County in southwestern Arkansas...\nPike County in southwestern Arkansas...\nSoutheastern Montgomery County in western Arkansas...\n\n* Until 1030 AM CST.\n\n* At 727 AM CST, Doppler radar indicated thunderstorms producing\nheavy rain across the warned area. Between 1 and 3 inches of rain\nhave fallen. The expected rainfall rate is 1 to 2 inches in 1\nhour. Flash flooding is ongoing or expected to begin shortly.\n\nHAZARD...Flash flooding caused by thunderstorms.\n\nSOURCE...Radar.\n\nIMPACT...Flash flooding of small creeks and streams, urban\nareas, highways, streets and underpasses as well as\nother poor drainage and low-lying areas.\n\n* Some locations that will experience flash flooding include...\nHot Springs... Murfreesboro...\nGlenwood... Mountain Pine...\nAmity... Norman...\nDaisy... Meyers...\nLofton... Daisy State Park...\nNarrows Dam... Rockwell...\nCrater Of Diamonds State Park... Hot Springs Memorial Field...\nAlbert Pike Recreation Area... Hot Springs National Park...\nBismarck... Alpine...\nWelsh... Rosboro...", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FFWLZK" + ], + "WMOidentifier": [ + "WGUS54 KLZK 071327" + ], + "flashFloodDetection": [ + "RADAR INDICATED" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLZK.FF.W.0002.260307T1327Z-260307T1630Z/" + ], + "eventEndingTime": [ + "2026-03-07T10:30:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FFW" + ], + "NationalWeatherService": [ + "FFW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.ed2edf2ff61c7ebc5b6bf0a7a9a28b6c4198f135.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.6, + 36.04 + ], + [ + -91.53, + 35.53 + ], + [ + -91.58, + 35.53 + ], + [ + -91.58, + 35.5 + ], + [ + -92.22, + 35.54 + ], + [ + -92.24, + 35.64 + ], + [ + -92.24, + 35.71 + ], + [ + -92.26, + 35.71 + ], + [ + -92.29, + 35.82 + ], + [ + -91.6, + 36.04 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.ed2edf2ff61c7ebc5b6bf0a7a9a28b6c4198f135.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.ed2edf2ff61c7ebc5b6bf0a7a9a28b6c4198f135.001.1", + "areaDesc": "Sharp; Stone; Izard; Independence; Cleburne; White", + "geocode": { + "SAME": [ + "005135", + "005137", + "005065", + "005063", + "005023", + "005145" + ], + "UGC": [ + "ARZ007", + "ARZ014", + "ARZ015", + "ARZ016", + "ARZ024", + "ARZ033" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/ARZ007", + "https://api.weather.gov/zones/forecast/ARZ014", + "https://api.weather.gov/zones/forecast/ARZ015", + "https://api.weather.gov/zones/forecast/ARZ016", + "https://api.weather.gov/zones/forecast/ARZ024", + "https://api.weather.gov/zones/forecast/ARZ033" + ], + "references": [], + "sent": "2026-03-07T07:12:00-06:00", + "effective": "2026-03-07T07:12:00-06:00", + "onset": "2026-03-07T07:12:00-06:00", + "expires": "2026-03-07T08:00:00-06:00", + "ends": null, + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Observed", + "urgency": "Expected", + "event": "Special Weather Statement", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Special Weather Statement issued March 7 at 7:12AM CST by NWS Little Rock AR", + "description": "At 711 AM CST, Doppler radar was tracking a strong thunderstorm near\nGreers Ferry, or 7 miles northeast of Fairfield Bay, moving east at\n55 mph.\n\nHAZARD...Wind gusts up to 50 mph.\n\nSOURCE...Radar indicated.\n\nIMPACT...Gusty winds could knock down tree limbs and blow around\nunsecured objects.\n\nLocations impacted include...\nBatesville... Heber Springs...\nMountain View... Fairfield Bay...\nGreers Ferry... Cushman...\nMount Pleasant... Pleasant Plains...\nConcord... Sidney...\nMoorefield... Higden...\nSalado... Croker...\nSouthside in Independence Count...Bethesda...\nGuion... Ben...\nAlmond... Hanover...", + "instruction": "If outdoors, consider seeking shelter inside a building.\n\nA Tornado Watch remains in effect until 800 AM CST for central and\nnorth central Arkansas.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "SPSLZK" + ], + "WMOidentifier": [ + "WWUS84 KLZK 071312" + ], + "NWSheadline": [ + "A strong thunderstorm will impact portions of southern Stone, western Independence, southeastern Izard, northern Cleburne, north central White and southwestern Sharp Counties through 800 AM CST" + ], + "eventMotionDescription": [ + "2026-03-07T13:11:00-00:00...storm...256DEG...48KT...35.65,-92.14" + ], + "maxWindGust": [ + "50 MPH" + ], + "maxHailSize": [ + "0.00" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SPS" + ], + "NationalWeatherService": [ + "SPS" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "areaDesc": "Clark, AR; Cleburne, AR; Conway, AR; Dallas, AR; Faulkner, AR; Garland, AR; Grant, AR; Hot Spring, AR; Independence, AR; Lonoke, AR; Montgomery, AR; Ouachita, AR; Perry, AR; Pike, AR; Pope, AR; Pulaski, AR; Saline, AR; Searcy, AR; Stone, AR; Van Buren, AR; White, AR; Yell, AR", + "geocode": { + "SAME": [ + "005019", + "005023", + "005029", + "005039", + "005045", + "005051", + "005053", + "005059", + "005063", + "005085", + "005097", + "005103", + "005105", + "005109", + "005115", + "005119", + "005125", + "005129", + "005137", + "005141", + "005145", + "005149" + ], + "UGC": [ + "ARC019", + "ARC023", + "ARC029", + "ARC039", + "ARC045", + "ARC051", + "ARC053", + "ARC059", + "ARC063", + "ARC085", + "ARC097", + "ARC103", + "ARC105", + "ARC109", + "ARC115", + "ARC119", + "ARC125", + "ARC129", + "ARC137", + "ARC141", + "ARC145", + "ARC149" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC019", + "https://api.weather.gov/zones/county/ARC023", + "https://api.weather.gov/zones/county/ARC029", + "https://api.weather.gov/zones/county/ARC039", + "https://api.weather.gov/zones/county/ARC045", + "https://api.weather.gov/zones/county/ARC051", + "https://api.weather.gov/zones/county/ARC053", + "https://api.weather.gov/zones/county/ARC059", + "https://api.weather.gov/zones/county/ARC063", + "https://api.weather.gov/zones/county/ARC085", + "https://api.weather.gov/zones/county/ARC097", + "https://api.weather.gov/zones/county/ARC103", + "https://api.weather.gov/zones/county/ARC105", + "https://api.weather.gov/zones/county/ARC109", + "https://api.weather.gov/zones/county/ARC115", + "https://api.weather.gov/zones/county/ARC119", + "https://api.weather.gov/zones/county/ARC125", + "https://api.weather.gov/zones/county/ARC129", + "https://api.weather.gov/zones/county/ARC137", + "https://api.weather.gov/zones/county/ARC141", + "https://api.weather.gov/zones/county/ARC145", + "https://api.weather.gov/zones/county/ARC149" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6d9b39fd6e1ceb202a2a70cd92c68d4d9fb84e21.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.6d9b39fd6e1ceb202a2a70cd92c68d4d9fb84e21.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-07T03:19:00-06:00" + } + ], + "sent": "2026-03-07T06:45:00-06:00", + "effective": "2026-03-07T06:45:00-06:00", + "onset": "2026-03-07T06:45:00-06:00", + "expires": "2026-03-07T08:00:00-06:00", + "ends": "2026-03-07T08:00:00-06:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Extreme", + "certainty": "Possible", + "urgency": "Future", + "event": "Tornado Watch", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Tornado Watch issued March 7 at 6:45AM CST until March 7 at 8:00AM CST by NWS Little Rock AR", + "description": "TORNADO WATCH 22 REMAINS VALID UNTIL 8 AM CST THIS MORNING FOR\nTHE FOLLOWING AREAS\n\nIN ARKANSAS THIS WATCH INCLUDES 22 COUNTIES\n\nIN CENTRAL ARKANSAS\n\nCONWAY FAULKNER GARLAND\nGRANT LONOKE PERRY\nPOPE PULASKI SALINE\nWHITE YELL\n\nIN NORTH CENTRAL ARKANSAS\n\nCLEBURNE INDEPENDENCE SEARCY\nSTONE VAN BUREN\n\nIN SOUTHWEST ARKANSAS\n\nCLARK DALLAS HOT SPRING\nOUACHITA PIKE\n\nIN WESTERN ARKANSAS\n\nMONTGOMERY\n\nTHIS INCLUDES THE CITIES OF ARKADELPHIA, BATESVILLE, BEEBE,\nBENTON, BRYANT, CABOT, CAMDEN, CLINTON, CONWAY, DANVILLE,\nDARDANELLE, FAIRFIELD BAY, FORDYCE, GLENWOOD, HEBER SPRINGS,\nHOT SPRINGS, LESLIE, LITTLE ROCK, LONOKE, MALVERN, MARSHALL,\nMORRILTON, MOUNT IDA, MOUNTAIN VIEW, MURFREESBORO, NORMAN,\nNORTH LITTLE ROCK, OLA, PERRYVILLE, RUSSELLVILLE, SEARCY,\nAND SHERIDAN.", + "instruction": null, + "response": "Monitor", + "parameters": { + "AWIPSidentifier": [ + "WCNLZK" + ], + "WMOidentifier": [ + "WWUS64 KLZK 071245" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.KLZK.TO.A.0022.000000T0000Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T08:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "TOA" + ], + "NationalWeatherService": [ + "TOA" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6d8375794418e9dc7603c1e9f865bf58581a366c.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6d8375794418e9dc7603c1e9f865bf58581a366c.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.6d8375794418e9dc7603c1e9f865bf58581a366c.001.1", + "areaDesc": "Columbia, AR; Hempstead, AR; Howard, AR; Lafayette, AR; Little River, AR; Miller, AR; Nevada, AR; Sevier, AR; Bossier, LA; Caddo, LA; Webster, LA; Bowie, TX; Cass, TX; Harrison, TX; Marion, TX; Morris, TX", + "geocode": { + "SAME": [ + "005027", + "005057", + "005061", + "005073", + "005081", + "005091", + "005099", + "005133", + "022015", + "022017", + "022119", + "048037", + "048067", + "048203", + "048315", + "048343" + ], + "UGC": [ + "ARC027", + "ARC057", + "ARC061", + "ARC073", + "ARC081", + "ARC091", + "ARC099", + "ARC133", + "LAC015", + "LAC017", + "LAC119", + "TXC037", + "TXC067", + "TXC203", + "TXC315", + "TXC343" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC027", + "https://api.weather.gov/zones/county/ARC057", + "https://api.weather.gov/zones/county/ARC061", + "https://api.weather.gov/zones/county/ARC073", + "https://api.weather.gov/zones/county/ARC081", + "https://api.weather.gov/zones/county/ARC091", + "https://api.weather.gov/zones/county/ARC099", + "https://api.weather.gov/zones/county/ARC133", + "https://api.weather.gov/zones/county/LAC015", + "https://api.weather.gov/zones/county/LAC017", + "https://api.weather.gov/zones/county/LAC119", + "https://api.weather.gov/zones/county/TXC037", + "https://api.weather.gov/zones/county/TXC067", + "https://api.weather.gov/zones/county/TXC203", + "https://api.weather.gov/zones/county/TXC315", + "https://api.weather.gov/zones/county/TXC343" + ], + "references": [], + "sent": "2026-03-07T03:24:00-06:00", + "effective": "2026-03-07T03:24:00-06:00", + "onset": "2026-03-07T03:24:00-06:00", + "expires": "2026-03-07T08:00:00-06:00", + "ends": "2026-03-07T08:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Extreme", + "certainty": "Possible", + "urgency": "Future", + "event": "Tornado Watch", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Shreveport LA", + "headline": "Tornado Watch issued March 7 at 3:24AM CST until March 7 at 8:00AM CST by NWS Shreveport LA", + "description": "THE NATIONAL WEATHER SERVICE HAS ISSUED TORNADO WATCH 22 IN\nEFFECT UNTIL 8 AM CST THIS MORNING FOR THE FOLLOWING AREAS\n\nIN ARKANSAS THIS WATCH INCLUDES 8 COUNTIES\n\nIN SOUTHWEST ARKANSAS\n\nCOLUMBIA HEMPSTEAD HOWARD\nLAFAYETTE LITTLE RIVER MILLER\nNEVADA SEVIER\n\nIN LOUISIANA THIS WATCH INCLUDES 3 PARISHES\n\nIN NORTHWEST LOUISIANA\n\nBOSSIER CADDO WEBSTER\n\nIN TEXAS THIS WATCH INCLUDES 5 COUNTIES\n\nIN NORTHEAST TEXAS\n\nBOWIE CASS HARRISON\nMARION MORRIS\n\nTHIS INCLUDES THE CITIES OF ASHDOWN, ATLANTA, BOSSIER CITY,\nBRADLEY, DAINGERFIELD, DE QUEEN, DIERKS, HOPE, HUGHES SPRINGS,\nJEFFERSON, LEWISVILLE, LINDEN, LONE STAR, MAGNOLIA, MARSHALL,\nMINDEN, MINERAL SPRINGS, NAPLES, NASHVILLE, OMAHA, PRESCOTT,\nQUEEN CITY, SHREVEPORT, SPRINGHILL, STAMPS, TEXARKANA,\nAND TEXARKANA.", + "instruction": null, + "response": "Monitor", + "parameters": { + "AWIPSidentifier": [ + "WCNSHV" + ], + "WMOidentifier": [ + "WWUS64 KSHV 070924" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSHV.TO.A.0022.260307T0924Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T08:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "TOA" + ], + "NationalWeatherService": [ + "TOA" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -92.8, + 38.92 + ], + [ + -92.64, + 38.94 + ], + [ + -92.5, + 38.92 + ], + [ + -92.52, + 38.88 + ], + [ + -92.79, + 38.87 + ], + [ + -92.8, + 38.92 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "areaDesc": "Cooper, MO", + "geocode": { + "SAME": [ + "029053" + ], + "UGC": [ + "MOC053" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC053" + ], + "references": [], + "sent": "2026-03-07T08:40:00-05:00", + "effective": "2026-03-07T08:40:00-05:00", + "onset": "2026-03-07T10:40:00-05:00", + "expires": "2026-03-08T08:45:00-05:00", + "ends": "2026-03-08T14:43:00-05:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Kansas City/Pleasant Hill MO", + "headline": "Flood Warning issued March 7 at 7:40AM CST until March 8 at 2:43PM CDT by NWS Kansas City/Pleasant Hill MO", + "description": "...The National Weather Service in Pleasant Hill MO has issued a\nFlood Warning for the following rivers in Missouri...\n\nPetite Saline Creek near Boonville affecting Cooper County.\n\n* WHAT...Minor flooding is forecast.\n\n* WHERE...Petite Saline Creek near Boonville.\n\n* WHEN...Until early tomorrow afternoon.\n\n* IMPACTS...At 16.0 feet, Low lying woodlands and fields near the\ncreek flood.\nAt 19.5 feet, The creek floods U Highway about 4 miles southeast\nof Boonville.\n\n* ADDITIONAL DETAILS...\n- At 6:30 AM CST Saturday the stage was 14.1 feet.\n- Forecast...The river is expected to rise above flood stage\nlate this morning to a crest of 17.7 feet this evening. It\nwill then fall below flood stage just after midnight tonight.\n- Flood stage is 16.0 feet.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product along with additional weather and stream information is\navailable at www.weather.gov/kc/.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWEAX" + ], + "WMOidentifier": [ + "WGUS43 KEAX 071340" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL EARLY TOMORROW AFTERNOON" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KEAX.FL.W.0003.260307T1540Z-260308T1943Z/" + ], + "eventEndingTime": [ + "2026-03-08T14:43:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.ebd487516ef387e36991766dad75aed2854c454b.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.58, + 36.5 + ], + [ + -90.59, + 36.68 + ], + [ + -90.63, + 36.68 + ], + [ + -90.63, + 36.81 + ], + [ + -90.25, + 36.9 + ], + [ + -90.26, + 36.88 + ], + [ + -90.2, + 36.81 + ], + [ + -90.2, + 36.77 + ], + [ + -90.14, + 36.68 + ], + [ + -90.15, + 36.68 + ], + [ + -90.15, + 36.62 + ], + [ + -90.19, + 36.59 + ], + [ + -90.18, + 36.55 + ], + [ + -90.21, + 36.54 + ], + [ + -90.22, + 36.5 + ], + [ + -90.58, + 36.5 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.ebd487516ef387e36991766dad75aed2854c454b.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.ebd487516ef387e36991766dad75aed2854c454b.001.1", + "areaDesc": "Butler", + "geocode": { + "SAME": [ + "029023" + ], + "UGC": [ + "MOZ109" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/MOZ109" + ], + "references": [], + "sent": "2026-03-07T07:33:00-06:00", + "effective": "2026-03-07T07:33:00-06:00", + "onset": "2026-03-07T07:33:00-06:00", + "expires": "2026-03-07T08:15:00-06:00", + "ends": null, + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Observed", + "urgency": "Expected", + "event": "Special Weather Statement", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Paducah KY", + "headline": "Special Weather Statement issued March 7 at 7:33AM CST by NWS Paducah KY", + "description": "At 732 AM CST, Doppler radar was tracking a strong thunderstorm over\nFairdealing, or 12 miles east of Doniphan, moving east at 50 mph.\n\nHAZARD...Wind gusts up to 50 mph and pea size hail.\n\nSOURCE...Radar indicated.\n\nIMPACT...Gusty winds could knock down tree limbs and blow around\nunsecured objects. Minor hail damage to vegetation is\npossible.\n\nLocations impacted include...\nPoplar Bluff, Neelyville, Qulin, Fisk, Harviell, Milltown, and\nRombauer.", + "instruction": "If outdoors, consider seeking shelter inside a building.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "SPSPAH" + ], + "WMOidentifier": [ + "WWUS83 KPAH 071333" + ], + "NWSheadline": [ + "A STRONG THUNDERSTORM WILL IMPACT BUTLER COUNTY THROUGH 815 AM CST" + ], + "eventMotionDescription": [ + "2026-03-07T13:32:00-00:00...storm...261DEG...44KT...36.65,-90.61" + ], + "maxWindGust": [ + "50 MPH" + ], + "maxHailSize": [ + "0.25" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SPS" + ], + "NationalWeatherService": [ + "SPS" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6c55297bcd484c6850db4bd09ae0d90b85ecd95.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -93.77, + 36.76 + ], + [ + -93.64, + 36.83 + ], + [ + -93.61, + 36.84 + ], + [ + -93.46, + 36.77 + ], + [ + -93.48, + 36.71 + ], + [ + -93.69, + 36.69 + ], + [ + -93.77, + 36.76 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6c55297bcd484c6850db4bd09ae0d90b85ecd95.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.f6c55297bcd484c6850db4bd09ae0d90b85ecd95.001.1", + "areaDesc": "Barry, MO; Stone, MO", + "geocode": { + "SAME": [ + "029009", + "029209" + ], + "UGC": [ + "MOC009", + "MOC209" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC009", + "https://api.weather.gov/zones/county/MOC209" + ], + "references": [], + "sent": "2026-03-07T07:32:00-06:00", + "effective": "2026-03-07T07:32:00-06:00", + "onset": "2026-03-07T07:32:00-06:00", + "expires": "2026-03-07T18:00:00-06:00", + "ends": "2026-03-07T18:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Springfield MO", + "headline": "Flood Warning issued March 7 at 7:32AM CST until March 7 at 6:00PM CST by NWS Springfield MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...A portion of southwest Missouri, including the following\ncounties, Barry and Stone.\n\n* WHEN...Until 600 PM CST Saturday.\n\n* IMPACTS...Flooding of rivers, creeks, streams, and other low-lying\nand flood-prone locations is imminent or occurring.\n\n* ADDITIONAL DETAILS...\n- At 732 AM CST, Doppler radar and automated rain gauges\nindicated heavy rain due to thunderstorms. Flooding is\nalready occurring in the warned area. Between 1 and 3 inches\nof rain have fallen.\n- This includes the following low water crossings...\nRockhouse Creek at Farm Road 2145.\nFlooding impacts will continue, but no additional rainfall is\nexpected.\n- Some locations that will experience flooding include...\nMccord Bend, Jenkins, Cape Fair and Table Rock Lake.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Many flood\ndeaths occur in vehicles.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWSGF" + ], + "WMOidentifier": [ + "WGUS43 KSGF 071332" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL 6 PM CST THIS EVENING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSGF.FA.W.0005.260307T1332Z-260308T0000Z/" + ], + "eventEndingTime": [ + "2026-03-07T18:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FAW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3a93ddbf0bd2b7058198dce1554ab77c5f913fdb.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.53, + 37.79 + ], + [ + -91.31, + 37.79 + ], + [ + -91.31, + 37.7 + ], + [ + -91.15, + 37.7 + ], + [ + -91.16, + 37.59 + ], + [ + -91.31, + 37.59 + ], + [ + -91.65, + 37.42 + ], + [ + -91.72, + 37.36 + ], + [ + -92.25, + 37.06 + ], + [ + -92.25, + 37.38 + ], + [ + -91.81, + 37.6 + ], + [ + -91.53, + 37.79 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3a93ddbf0bd2b7058198dce1554ab77c5f913fdb.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.3a93ddbf0bd2b7058198dce1554ab77c5f913fdb.001.1", + "areaDesc": "Dent, MO; Texas, MO", + "geocode": { + "SAME": [ + "029065", + "029215" + ], + "UGC": [ + "MOC065", + "MOC215" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC065", + "https://api.weather.gov/zones/county/MOC215" + ], + "references": [], + "sent": "2026-03-07T07:28:00-06:00", + "effective": "2026-03-07T07:28:00-06:00", + "onset": "2026-03-07T07:28:00-06:00", + "expires": "2026-03-07T15:00:00-06:00", + "ends": "2026-03-07T15:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Springfield MO", + "headline": "Flood Warning issued March 7 at 7:28AM CST until March 7 at 3:00PM CST by NWS Springfield MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...A portion of south central Missouri, including the\nfollowing counties, Dent and Texas.\n\n* WHEN...Until 300 PM CST Saturday.\n\n* IMPACTS...Flooding of rivers, creeks, streams, and other low-lying\nand flood-prone locations is imminent or occurring.\n\n* ADDITIONAL DETAILS...\n- At 728 AM CST, Doppler radar and automated rain gauges\nindicated heavy rain due to thunderstorms. Flooding is\nongoing or expected to begin shortly in the warned area.\nBetween 2 and 3 inches of rain have fallen.\n- This includes the following low water crossings...\nMeramec River at Spur Road, Big Piney River at Cleveland\nRoad, Gladden Creek at County Road 624, Boone Creek at Boone\nCreek Road, Crooked Creek at Highway TT, Little Piney River\nat Union Road and Dry Fork Creek at County Road 2430.\nAdditional rainfall amounts up to 0.5 inches are possible in\nthe warned area.\n- Some locations that will experience flooding include...\nSalem, Mountain Grove, Houston, Licking, Cabool,\nRaymondville, Huggins, Montauk, Prescott, Darien, Jadwin,\nBucyrus, Solo, Success, Howes, Simmons, Bangert, Stone Hill,\nBendavis, Sligo, Howes Mill, Boss, Montauk State Park and\nOzark National Scenic Riverways.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Many flood\ndeaths occur in vehicles.\n\nFlooding is occurring or is imminent. It is important to know where\nyou are relative to streams, rivers, or creeks which can become\nkillers in heavy rains. Campers and hikers should avoid streams or\ncreeks.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWSGF" + ], + "WMOidentifier": [ + "WGUS43 KSGF 071328" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL 3 PM CST THIS AFTERNOON... ...REPLACES FLOOD ADVISORY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSGF.FA.W.0004.260307T1328Z-260307T2100Z/" + ], + "eventEndingTime": [ + "2026-03-07T15:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FAW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4ea79457a2a4f5b7808927bd1afae07ba6a19770.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -93.89, + 36.96 + ], + [ + -93.61, + 37.1 + ], + [ + -93.22, + 37.09 + ], + [ + -93.49, + 36.9 + ], + [ + -94.26, + 36.5 + ], + [ + -94.32, + 36.84 + ], + [ + -93.89, + 36.96 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4ea79457a2a4f5b7808927bd1afae07ba6a19770.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4ea79457a2a4f5b7808927bd1afae07ba6a19770.001.1", + "areaDesc": "Barry, MO; Christian, MO; Lawrence, MO; McDonald, MO; Newton, MO; Stone, MO", + "geocode": { + "SAME": [ + "029009", + "029043", + "029109", + "029119", + "029145", + "029209" + ], + "UGC": [ + "MOC009", + "MOC043", + "MOC109", + "MOC119", + "MOC145", + "MOC209" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC009", + "https://api.weather.gov/zones/county/MOC043", + "https://api.weather.gov/zones/county/MOC109", + "https://api.weather.gov/zones/county/MOC119", + "https://api.weather.gov/zones/county/MOC145", + "https://api.weather.gov/zones/county/MOC209" + ], + "references": [], + "sent": "2026-03-07T06:56:00-06:00", + "effective": "2026-03-07T06:56:00-06:00", + "onset": "2026-03-07T06:56:00-06:00", + "expires": "2026-03-07T18:00:00-06:00", + "ends": "2026-03-07T18:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Springfield MO", + "headline": "Flood Warning issued March 7 at 6:56AM CST until March 7 at 6:00PM CST by NWS Springfield MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...A portion of southwest Missouri, including the following\ncounties, Barry, Christian, Lawrence, McDonald, Newton and Stone.\n\n* WHEN...Until 600 PM CST Saturday.\n\n* IMPACTS...Flooding of rivers, creeks, streams, and other low-lying\nand flood-prone locations is imminent or occurring.\n\n* ADDITIONAL DETAILS...\n- At 655 AM CST, Doppler radar and automated rain gauges\nindicated heavy rain due to thunderstorms. Flooding is\nongoing or expected to begin shortly in the warned area.\nBetween 2 and 3 inches of rain have fallen.\n- This includes the following low water crossings...\nNorth Indian Creek at Orchid Drive, Green Valley Creek at\nHolder RD, Wilson's Creek at Old Limey Road, Little Crane\nCreek at Old Wire Road, Flat Creek at Highway U, Flat Creek\nat Highway C and Shoal Creek at Farm Road 2110.\nFlooding impacts will continue, but no additional rainfall is\nexpected.\n- Some locations that will experience flooding include...\nSouthern Springfield, Nixa, Ozark, Monett, Aurora, Cassville,\nMarionville, Clever, Crane, Purdy, Billings, Exeter, Wheaton,\nVerona, Fairview, Fremont Hills, Butterfield, Newtonia,\nPioneer, Hurley, Stella, Stark City, Mcdowell, Pleasant\nRidge, Madry, Ridgley, Wheelerville, Rocky Comfort, Powell,\nBoaz and Big Sugar Creek State Park.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Many flood\ndeaths occur in vehicles.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWSGF" + ], + "WMOidentifier": [ + "WGUS43 KSGF 071256" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL 6 PM CST THIS EVENING... ...REPLACES FLASH FLOOD WARNING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSGF.FA.W.0003.260307T1256Z-260308T0000Z/" + ], + "eventEndingTime": [ + "2026-03-07T18:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FAW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a67b2070f166bea088b320fe19e9bbd814479285.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.48, + 37.22 + ], + [ + -90.22, + 37.23 + ], + [ + -90.22, + 37.1 + ], + [ + -90.21, + 37.08 + ], + [ + -90.3, + 36.93 + ], + [ + -90.46, + 36.8 + ], + [ + -90.93, + 36.81 + ], + [ + -90.73, + 37.02 + ], + [ + -90.48, + 37.22 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a67b2070f166bea088b320fe19e9bbd814479285.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.a67b2070f166bea088b320fe19e9bbd814479285.001.1", + "areaDesc": "Butler, MO; Carter, MO; Wayne, MO", + "geocode": { + "SAME": [ + "029023", + "029035", + "029223" + ], + "UGC": [ + "MOC023", + "MOC035", + "MOC223" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC023", + "https://api.weather.gov/zones/county/MOC035", + "https://api.weather.gov/zones/county/MOC223" + ], + "references": [], + "sent": "2026-03-07T06:38:00-06:00", + "effective": "2026-03-07T06:38:00-06:00", + "onset": "2026-03-07T06:38:00-06:00", + "expires": "2026-03-07T12:45:00-06:00", + "ends": "2026-03-07T12:45:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Immediate", + "event": "Flash Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Paducah KY", + "headline": "Flash Flood Warning issued March 7 at 6:38AM CST until March 7 at 12:45PM CST by NWS Paducah KY", + "description": "FFWPAH\n\nThe National Weather Service in Paducah has issued a\n\n* Flash Flood Warning for...\nNorthwestern Butler County in southeastern Missouri...\nSoutheastern Carter County in southeastern Missouri...\nSouthern Wayne County in southeastern Missouri...\n\n* Until 1245 PM CST Saturday.\n\n* At 638 AM CST, Doppler radar indicated thunderstorms producing\nheavy rain across the warned area. Between 1 and 2 inches of rain\nhave fallen. Additional rainfall amounts in excess of 1 inch are\npossible in the warned area. Flash flooding is ongoing or expected\nto begin shortly.\n\nHAZARD...Flash flooding caused by thunderstorms.\n\nSOURCE...Radar.\n\nIMPACT...Flash flooding of small creeks and streams, urban\nareas, highways, streets and underpasses as well as\nother poor drainage and low-lying areas.\n\n* Some locations that will experience flash flooding include...\nGreenville, Lake Wappapello State Park, Ellsinore, Williamsville,\nHendrickson, Brush Arbor, Shook, Hunter and Grandin.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FFWPAH" + ], + "WMOidentifier": [ + "WGUS53 KPAH 071238" + ], + "flashFloodDetection": [ + "RADAR INDICATED" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KPAH.FF.W.0003.260307T1238Z-260307T1845Z/" + ], + "eventEndingTime": [ + "2026-03-07T12:45:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FFW" + ], + "NationalWeatherService": [ + "FFW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.eada962fa1a41fa1f2056715c5846b262eaef597.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -92.07, + 37.88 + ], + [ + -92.04, + 37.87 + ], + [ + -92.05, + 37.82 + ], + [ + -92.03, + 37.81 + ], + [ + -92, + 37.77 + ], + [ + -92.03, + 37.67 + ], + [ + -92.1, + 37.67 + ], + [ + -92.09, + 37.77 + ], + [ + -92.1, + 37.83 + ], + [ + -92.09, + 37.86 + ], + [ + -92.07, + 37.88 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.eada962fa1a41fa1f2056715c5846b262eaef597.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.eada962fa1a41fa1f2056715c5846b262eaef597.001.1", + "areaDesc": "Pulaski, MO", + "geocode": { + "SAME": [ + "029169" + ], + "UGC": [ + "MOC169" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC169" + ], + "references": [], + "sent": "2026-03-07T07:07:00-05:00", + "effective": "2026-03-07T07:07:00-05:00", + "onset": "2026-03-07T07:07:00-05:00", + "expires": "2026-03-08T07:15:00-05:00", + "ends": "2026-03-08T14:40:00-05:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Springfield MO", + "headline": "Flood Warning issued March 7 at 6:07AM CST until March 8 at 2:40PM CDT by NWS Springfield MO", + "description": "...The National Weather Service in Springfield MO has issued a Flood\nWarning for the following rivers in Missouri...\n\nBig Piney below Fort Leonard Wood -East Gate affecting Pulaski\nCounty.\n\nFor the Big Piney River...including Fort Leonard Wood - East Gate...\nMinor flooding is forecast.\n\n* WHAT...Minor flooding is forecast.\n\n* WHERE...Big Piney below Fort Leonard Wood - East Gate.\n\n* WHEN...From this morning to early tomorrow afternoon.\n\n* IMPACTS...At 9.0 feet, the Happy Hollow Picnic Area floods.\n\n* ADDITIONAL DETAILS...\n- At 5:00 AM CST Saturday the stage was 5.5 feet.\n- Bankfull stage is 8.0 feet.\n- Forecast...The river will rise above flood stage this evening\nto 9.4 feet just after midnight tonight. It will then fall\nbelow flood stage tomorrow morning to 3.1 feet Tuesday\nmorning. It will rise to 3.5 feet Wednesday morning. It will\nthen fall again and remain below flood stage.\n- Flood stage is 8.0 feet.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Many flood\ndeaths occur in vehicles.\n\nAdditional information is available at www.weather.gov.\n\nThe next statement will be issued Sunday morning at 715 AM CDT.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWSGF" + ], + "WMOidentifier": [ + "WGUS43 KSGF 071207" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT FROM THIS MORNING TO EARLY TOMORROW AFTERNOON" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSGF.FL.W.0004.260307T1207Z-260308T1940Z/" + ], + "eventEndingTime": [ + "2026-03-08T14:40:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.61, + 38.07 + ], + [ + -90.61, + 38.02 + ], + [ + -90.63, + 38.01 + ], + [ + -90.58, + 38 + ], + [ + -90.42, + 38.04 + ], + [ + -90.34, + 38.09 + ], + [ + -90.28, + 38.09 + ], + [ + -90.25, + 38.12 + ], + [ + -90.25, + 38.13 + ], + [ + -90.22, + 38.09 + ], + [ + -90, + 37.96 + ], + [ + -89.93, + 37.96 + ], + [ + -89.97, + 37.93 + ], + [ + -89.94, + 37.87 + ], + [ + -90.15, + 37.64 + ], + [ + -90.65, + 37.64 + ], + [ + -90.64, + 38.08 + ], + [ + -90.61, + 38.07 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "areaDesc": "Ste. Genevieve, MO; St. Francois, MO", + "geocode": { + "SAME": [ + "029186", + "029187" + ], + "UGC": [ + "MOC186", + "MOC187" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC186", + "https://api.weather.gov/zones/county/MOC187" + ], + "references": [], + "sent": "2026-03-07T05:05:00-06:00", + "effective": "2026-03-07T05:05:00-06:00", + "onset": "2026-03-07T05:05:00-06:00", + "expires": "2026-03-07T10:00:00-06:00", + "ends": "2026-03-07T10:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Advisory issued March 7 at 5:05AM CST until March 7 at 10:00AM CST by NWS St Louis MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...Sainte Genevieve County in southeastern Missouri...\nSaint Francois County in southeastern Missouri...\n\n* WHEN...Until 1000 AM CST.\n\n* IMPACTS...Rises in small streams. Water over roadways.\n\n* ADDITIONAL DETAILS...\n- At 505 AM CST, Doppler radar indicated heavy rain due to\nthunderstorms. Minor flooding is ongoing or expected to begin\nshortly in the advisory area. Between 1 and 2 inches of rain have\nfallen.\n- Additional rainfall amounts up to 1 inch are expected over the\narea. This additional rain will result in minor flooding.\n- Some locations that will experience flooding include...\nFarmington, Bonne Terre, Desloge, Ste. Genevieve, Bismarck,\nLeadwood, Park Hills, Iron Mountain Lake, Bloomsdale, St. Mary,\nWeingarten, Rocky Ridge, Coffman, Knob Lick, Womac, Iron\nMountain, Leadington, French Village, Libertyville and Doe Run.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nBe especially cautious at night when it is harder to recognize the\ndangers of flooding.\n\nBe aware of your surroundings and do not drive on flooded roads.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLSLSX" + ], + "WMOidentifier": [ + "WGUS83 KLSX 071105" + ], + "NWSheadline": [ + "FLOOD ADVISORY IN EFFECT UNTIL 10 AM CST THIS MORNING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.NEW.KLSX.FA.Y.0006.260307T1105Z-260307T1600Z/" + ], + "eventEndingTime": [ + "2026-03-07T10:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "FAY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4925d19cd15570fba86dab06debbc76b69e2d381.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -94.61, + 37.18 + ], + [ + -94.38, + 37.36 + ], + [ + -94.09, + 37.58 + ], + [ + -93.62, + 37.57 + ], + [ + -94.07, + 37.29 + ], + [ + -94.3, + 37.15 + ], + [ + -94.59, + 37.15 + ], + [ + -94.61, + 37.18 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4925d19cd15570fba86dab06debbc76b69e2d381.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4925d19cd15570fba86dab06debbc76b69e2d381.001.1", + "areaDesc": "Barton, MO; Dade, MO; Jasper, MO", + "geocode": { + "SAME": [ + "029011", + "029057", + "029097" + ], + "UGC": [ + "MOC011", + "MOC057", + "MOC097" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC011", + "https://api.weather.gov/zones/county/MOC057", + "https://api.weather.gov/zones/county/MOC097" + ], + "references": [], + "sent": "2026-03-07T04:56:00-06:00", + "effective": "2026-03-07T04:56:00-06:00", + "onset": "2026-03-07T04:56:00-06:00", + "expires": "2026-03-07T12:00:00-06:00", + "ends": "2026-03-07T12:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Springfield MO", + "headline": "Flood Warning issued March 7 at 4:56AM CST until March 7 at 12:00PM CST by NWS Springfield MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...A portion of southwest Missouri, including the following\ncounties, Barton, Dade and Jasper.\n\n* WHEN...Until noon CST Saturday.\n\n* IMPACTS...Flooding of rivers, creeks, streams, and other low-lying\nand flood-prone locations is imminent or occurring.\n\n* ADDITIONAL DETAILS...\n- At 456 AM CST, Doppler radar and automated rain gauges\nindicated heavy rain due to thunderstorms. Flooding is\nalready occurring in the warned area. Between 2 and 3 inches\nof rain have fallen.\n- This includes the following low water crossings...\nSons Creek at County Road 113, Dry Fork at Pine Road, Lousy\nBranch at County Road 85 and Muddy Creek at Highway 126.\n- Some locations that will experience flooding include...\nNorthern Joplin, Carthage, Webb City, Carl Junction, Oronogo,\nCarterville, Lockwood, Jasper, Golden City, Alba, Purcell,\nAirport Drive, Carytown, Neck City, Brooklyn Heights, Arcola,\nKenoma, Dudenville, Boston, Sylvania, Cedarville, Neola, Bona\nand Stockton Lake.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Many flood\ndeaths occur in vehicles.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWSGF" + ], + "WMOidentifier": [ + "WGUS43 KSGF 071056" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL NOON CST TODAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KSGF.FA.W.0002.260307T1056Z-260307T1800Z/" + ], + "eventEndingTime": [ + "2026-03-07T12:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FAW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3a6c0a3429dab169abb74b7e6af6ca17542a9578.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.31, + 37.71 + ], + [ + -91.31, + 37.79 + ], + [ + -91.33, + 37.79 + ], + [ + -91.11, + 37.88 + ], + [ + -90.65, + 37.95 + ], + [ + -90.65, + 37.62 + ], + [ + -90.78, + 37.59 + ], + [ + -91.16, + 37.58 + ], + [ + -91.16, + 37.59 + ], + [ + -91.15, + 37.65 + ], + [ + -91.15, + 37.7 + ], + [ + -91.22, + 37.7 + ], + [ + -91.31, + 37.71 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3a6c0a3429dab169abb74b7e6af6ca17542a9578.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.3a6c0a3429dab169abb74b7e6af6ca17542a9578.001.1", + "areaDesc": "Crawford, MO; Iron, MO; Reynolds, MO; Washington, MO", + "geocode": { + "SAME": [ + "029055", + "029093", + "029179", + "029221" + ], + "UGC": [ + "MOC055", + "MOC093", + "MOC179", + "MOC221" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC055", + "https://api.weather.gov/zones/county/MOC093", + "https://api.weather.gov/zones/county/MOC179", + "https://api.weather.gov/zones/county/MOC221" + ], + "references": [], + "sent": "2026-03-07T04:08:00-06:00", + "effective": "2026-03-07T04:08:00-06:00", + "onset": "2026-03-07T04:08:00-06:00", + "expires": "2026-03-07T09:00:00-06:00", + "ends": "2026-03-07T09:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Immediate", + "event": "Flash Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flash Flood Warning issued March 7 at 4:08AM CST until March 7 at 9:00AM CST by NWS St Louis MO", + "description": "FFWLSX\n\nThe National Weather Service in St Louis has issued a\n\n* Flash Flood Warning for...\nSoutheastern Crawford County in east central Missouri...\nSouthern Washington County in east central Missouri...\nNorthern Iron County in southeastern Missouri...\nNorth Central Reynolds County in southeastern Missouri...\n\n* Until 900 AM CST.\n\n* At 408 AM CST, Doppler radar indicated thunderstorms producing\nheavy rain across the warned area. Between 2 and 3 inches of rain\nhave fallen. Additional rainfall amounts around 1 to two inches are\npossible in the warned area. Flash flooding is ongoing or expected\nto begin shortly.\n\nHAZARD...Flash flooding caused by thunderstorms.\n\nSOURCE...Radar indicated.\n\nIMPACT...Flash flooding of small creeks and streams, urban areas,\nhighways, streets and underpasses as well as other poor\ndrainage and low-lying areas.\n\n* Some locations that will experience flash flooding include...\nPotosi, Pilot Knob, Viburnum, Irondale, Courtois, Bixby, Belleview,\nCaledonia, Belgrade, Davisville, Dillard and Granite.\n\nThis includes the following State Parks...\nElephant Rocks State Park and Dillard Mill Historic Site.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nBe especially cautious at night when it is harder to recognize the\ndangers of flooding.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FFWLSX" + ], + "WMOidentifier": [ + "WGUS53 KLSX 071008" + ], + "flashFloodDetection": [ + "RADAR INDICATED" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLSX.FF.W.0002.260307T1008Z-260307T1500Z/" + ], + "eventEndingTime": [ + "2026-03-07T09:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FFW" + ], + "NationalWeatherService": [ + "FFW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.29a958639c12e28208249302378989a89ccf0ab7.002.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.22, + 38.01 + ], + [ + -91.26, + 38.07 + ], + [ + -91.16, + 38.16 + ], + [ + -91.1, + 38.28 + ], + [ + -90.97, + 38.32 + ], + [ + -90.91, + 38.39 + ], + [ + -90.82, + 38.39 + ], + [ + -90.92, + 38.25 + ], + [ + -91.05, + 38.23 + ], + [ + -91.11, + 38.08 + ], + [ + -91.22, + 38.01 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.29a958639c12e28208249302378989a89ccf0ab7.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.29a958639c12e28208249302378989a89ccf0ab7.002.1", + "areaDesc": "Crawford, MO; Washington, MO", + "geocode": { + "SAME": [ + "029055", + "029221" + ], + "UGC": [ + "MOC055", + "MOC221" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC055", + "https://api.weather.gov/zones/county/MOC221" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.98fe972124704cfe1707b08b17bac9c0eb9bf007.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.98fe972124704cfe1707b08b17bac9c0eb9bf007.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T08:28:00-05:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.e84090d104768154fb69fbc389489a487f8586b3.002.1", + "identifier": "urn:oid:2.49.0.1.840.0.e84090d104768154fb69fbc389489a487f8586b3.002.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T22:14:00-05:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6b48437988e0c6c9abb4c8d63ce10e98580047c3.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.6b48437988e0c6c9abb4c8d63ce10e98580047c3.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T12:27:00-05:00" + } + ], + "sent": "2026-03-06T19:29:00-05:00", + "effective": "2026-03-06T19:29:00-05:00", + "onset": "2026-03-06T19:29:00-05:00", + "expires": "2026-03-08T07:30:00-05:00", + "ends": "2026-03-08T23:10:00-05:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Severe", + "certainty": "Observed", + "urgency": "Immediate", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Warning issued March 6 at 6:29PM CST until March 8 at 11:10PM CDT by NWS St Louis MO", + "description": "...The Flood Warning continues for the following rivers in\nMissouri...\n\nMeramec River near Sullivan.\n\n...The Flood Warning is cancelled for the following rivers in\nMissouri...\n\nMeramec River near Steelville.\n\nRiver forecasts are based on observed precipitation and forecast\nprecipitation for the next 48 hours.\n\n* WHAT...Minor flooding is occurring and minor flooding is forecast.\n\n* WHERE...Meramec River near Sullivan.\n\n* WHEN...Until Sunday evening.\n\n* IMPACTS...At 15.6 feet, The basic loop of the Onondaga Cave State\nPark campground begins flooding near this height.\n\n* ADDITIONAL DETAILS...\n- At 5:29 PM CST Friday the stage was 16.3 feet.\n- Recent Activity...The maximum river stage in the 24 hours ending\nat 5:29 PM CST Friday was 19.7 feet.\n- Forecast...The river is expected to fall below flood stage\ntomorrow afternoon and continue falling to 5.6 feet Thursday\nevening.\n- Flood stage is 11.0 feet.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product, along with additional weather and stream information,\nis available at https://water.noaa.gov/wfo/lsx", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLSLSX" + ], + "WMOidentifier": [ + "WGUS83 KLSX 070029" + ], + "NWSheadline": [ + "FLOOD WARNING NOW IN EFFECT UNTIL SUNDAY EVENING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.EXT.KLSX.FL.W.0001.000000T0000Z-260309T0410Z/" + ], + "eventEndingTime": [ + "2026-03-08T23:10:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLS" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.64, + 38.44 + ], + [ + -90.66, + 38.5 + ], + [ + -90.64, + 38.55 + ], + [ + -90.56, + 38.55 + ], + [ + -90.56, + 38.5 + ], + [ + -90.64, + 38.44 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.001.1", + "areaDesc": "Jefferson, MO; St. Louis, MO", + "geocode": { + "SAME": [ + "029099", + "029189" + ], + "UGC": [ + "MOC099", + "MOC189" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC099", + "https://api.weather.gov/zones/county/MOC189" + ], + "references": [], + "sent": "2026-03-06T19:27:00-05:00", + "effective": "2026-03-06T19:27:00-05:00", + "onset": "2026-03-07T11:07:00-05:00", + "expires": "2026-03-08T07:30:00-05:00", + "ends": "2026-03-10T05:00:00-05:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Warning issued March 6 at 6:27PM CST until March 10 at 5:00AM CDT by NWS St Louis MO", + "description": "...The National Weather Service in St Louis has issued a Flood\nWarning for the following rivers in Missouri...\n\nMeramec River near Eureka.\n\nMeramec River at Valley Park.\n\nRiver forecasts are based on observed precipitation and forecast\nprecipitation for the next 48 hours.\n\n* WHAT...Minor flooding is forecast.\n\n* WHERE...Meramec River near Eureka.\n\n* WHEN...From Saturday morning to late Monday night.\n\n* IMPACTS...At 22.0 feet, Willman Road near the Highway 109 bridge\nbecomes inundated and impassable.\n\n* ADDITIONAL DETAILS...\n- At 6:00 PM CST Friday the stage was 15.0 feet.\n- Forecast...The river is expected to rise above flood stage late\ntomorrow morning to a crest of 22.5 feet Sunday morning. It will\nthen fall below flood stage late Sunday evening.\n- Flood stage is 19.0 feet.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product, along with additional weather and stream information,\nis available at https://water.noaa.gov/wfo/lsx", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWLSX" + ], + "WMOidentifier": [ + "WGUS43 KLSX 070027" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT FROM SATURDAY MORNING TO LATE MONDAY NIGHT" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLSX.FL.W.0005.260307T1607Z-260310T1000Z/" + ], + "eventEndingTime": [ + "2026-03-10T05:00:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.002.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.56, + 38.5 + ], + [ + -90.56, + 38.55 + ], + [ + -90.47, + 38.57 + ], + [ + -90.43, + 38.56 + ], + [ + -90.42, + 38.53 + ], + [ + -90.51, + 38.53 + ], + [ + -90.56, + 38.5 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.997f21ad16bc15cc3b9d884708a2664d39f6e9ad.002.1", + "areaDesc": "Jefferson, MO; St. Louis, MO", + "geocode": { + "SAME": [ + "029099", + "029189" + ], + "UGC": [ + "MOC099", + "MOC189" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC099", + "https://api.weather.gov/zones/county/MOC189" + ], + "references": [], + "sent": "2026-03-06T19:27:00-05:00", + "effective": "2026-03-06T19:27:00-05:00", + "onset": "2026-03-07T22:13:00-05:00", + "expires": "2026-03-08T07:30:00-05:00", + "ends": "2026-03-10T07:00:00-05:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Warning issued March 6 at 6:27PM CST until March 10 at 7:00AM CDT by NWS St Louis MO", + "description": "...The National Weather Service in St Louis has issued a Flood\nWarning for the following rivers in Missouri...\n\nMeramec River near Eureka.\n\nMeramec River at Valley Park.\n\nRiver forecasts are based on observed precipitation and forecast\nprecipitation for the next 48 hours.\n\n* WHAT...Minor flooding is forecast.\n\n* WHERE...Meramec River at Valley Park.\n\n* WHEN...From Saturday evening to Tuesday morning.\n\n* IMPACTS...At 19.5 feet, Buder Park and the recreation park at the\nwater plant floods.\n\n* ADDITIONAL DETAILS...\n- At 6:00 PM CST Friday the stage was 10.6 feet.\n- Forecast...The river is expected to rise above flood stage late\ntomorrow evening to a crest of 19.7 feet early Sunday afternoon.\nIt will then fall below flood stage early Monday morning.\n- Flood stage is 18.0 feet.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product, along with additional weather and stream information,\nis available at https://water.noaa.gov/wfo/lsx", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWLSX" + ], + "WMOidentifier": [ + "WGUS43 KLSX 070027" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT FROM SATURDAY EVENING TO TUESDAY MORNING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLSX.FL.W.0006.260308T0313Z-260310T1200Z/" + ], + "eventEndingTime": [ + "2026-03-10T07:00:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.c7d59a3a77d27f008822ae4c686095972e0dfab4.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.61, + 38.33 + ], + [ + -90.67, + 38.33 + ], + [ + -90.67, + 38.39 + ], + [ + -90.62, + 38.43 + ], + [ + -90.64, + 38.47 + ], + [ + -90.59, + 38.48 + ], + [ + -90.56, + 38.46 + ], + [ + -90.57, + 38.41 + ], + [ + -90.61, + 38.4 + ], + [ + -90.62, + 38.37 + ], + [ + -90.61, + 38.33 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.c7d59a3a77d27f008822ae4c686095972e0dfab4.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.c7d59a3a77d27f008822ae4c686095972e0dfab4.001.1", + "areaDesc": "Jefferson, MO", + "geocode": { + "SAME": [ + "029099" + ], + "UGC": [ + "MOC099" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC099" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4eb86323ba1b331e729c6b26b1ac912e1186d286.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.4eb86323ba1b331e729c6b26b1ac912e1186d286.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T10:41:00-05:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.ef68640f39d4297a02cf3f5ac6b4d69b6511ab28.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.ef68640f39d4297a02cf3f5ac6b4d69b6511ab28.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T22:12:00-05:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6b48437988e0c6c9abb4c8d63ce10e98580047c3.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.6b48437988e0c6c9abb4c8d63ce10e98580047c3.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T12:27:00-05:00" + } + ], + "sent": "2026-03-06T19:22:00-05:00", + "effective": "2026-03-06T19:22:00-05:00", + "onset": "2026-03-06T19:22:00-05:00", + "expires": "2026-03-08T07:30:00-05:00", + "ends": "2026-03-09T16:16:00-05:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Severe", + "certainty": "Observed", + "urgency": "Immediate", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Warning issued March 6 at 6:22PM CST until March 9 at 4:16PM CDT by NWS St Louis MO", + "description": "...The Flood Warning is extended for the following rivers in\nMissouri...\n\nBig River at Byrnesville.\n\nRiver forecasts are based on observed precipitation and forecast\nprecipitation for the next 48 hours.\n\n* WHAT...Moderate flooding is occurring and moderate flooding is\nforecast.\n\n* WHERE...Big River at Byrnesville.\n\n* WHEN...Until Monday afternoon.\n\n* IMPACTS...At 22.4 feet, At this level, Twin Rivers Bridge Road must\nbe closed.\n\n* ADDITIONAL DETAILS...\n- At 5:45 PM CST Friday the stage was 20.5 feet.\n- Recent Activity...The maximum river stage in the 24 hours ending\nat 5:45 PM CST Friday was 20.5 feet.\n- Forecast...The river is expected to rise to a crest of 22.5 feet\nearly tomorrow afternoon. It will then fall below flood stage\nSunday afternoon.\n- Flood stage is 16.0 feet.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product, along with additional weather and stream information,\nis available at https://water.noaa.gov/wfo/lsx", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLSLSX" + ], + "WMOidentifier": [ + "WGUS83 KLSX 070022" + ], + "NWSheadline": [ + "FLOOD WARNING NOW IN EFFECT UNTIL MONDAY AFTERNOON" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.EXT.KLSX.FL.W.0004.000000T0000Z-260309T2116Z/" + ], + "eventEndingTime": [ + "2026-03-09T16:16:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLS" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.003.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.003.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.003.1", + "areaDesc": "Cape Fairweather to Lisianski Strait; City and Borough of Sitka", + "geocode": { + "SAME": [ + "002105", + "002220" + ], + "UGC": [ + "AKZ322", + "AKZ323" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ322", + "https://api.weather.gov/zones/forecast/AKZ323" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T21:09:00-09:00" + } + ], + "sent": "2026-03-07T02:47:00-09:00", + "effective": "2026-03-07T02:47:00-09:00", + "onset": "2026-03-07T14:00:00-09:00", + "expires": "2026-03-07T11:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "High Wind Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "High Wind Warning issued March 7 at 2:47AM AKST until March 7 at 9:00PM AKST by NWS Juneau AK", + "description": "* WHAT...West winds 25 to 35 mph with gusts up to 60 mph\nexpected.\n\n* WHERE...Cape Fairweather to Lisianski Strait and City and\nBorough of Sitka.\n\n* WHEN...From 2 PM this afternoon to 9 PM AKST this evening.\n\n* IMPACTS...High winds will blow around unsecured objects and\nmay damage property and cause power outages. Travel by land,\nsea, or air will be difficult.\n\n* ADDITIONAL DETAILS...The exact timing and location of the\nstrongest winds remain uncertain given variations in potential\nstorm track. Anticipate snow showers in the wake of the system.", + "instruction": "People are urged to secure vessels and loose objects that could\nbe blown around or damaged by the wind.\n\nReport any damage to the National Weather Service by visiting\nweather.gov/Juneau/StormReports", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "NPWAJK" + ], + "WMOidentifier": [ + "WWAK77 PAJK 071147" + ], + "NWSheadline": [ + "HIGH WIND WARNING REMAINS IN EFFECT FROM 2 PM THIS AFTERNOON TO 9 PM AKST THIS EVENING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.PAJK.HW.W.0009.260307T2300Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.5a2c92251cbd81c63dec3a75e8ffc8c348dc09a5.001.1,2026-03-06T14:07:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "HWW" + ], + "NationalWeatherService": [ + "HWW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.006.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.006.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.006.1", + "areaDesc": "Western Kupreanof and Kuiu Island; Prince of Wales Island", + "geocode": { + "SAME": [ + "002198" + ], + "UGC": [ + "AKZ327", + "AKZ328" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ327", + "https://api.weather.gov/zones/forecast/AKZ328" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.006.1", + "identifier": "urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.006.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T21:09:00-09:00" + } + ], + "sent": "2026-03-07T02:47:00-09:00", + "effective": "2026-03-07T02:47:00-09:00", + "onset": "2026-03-07T14:00:00-09:00", + "expires": "2026-03-07T11:00:00-09:00", + "ends": "2026-03-08T00:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Wind Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "Wind Advisory issued March 7 at 2:47AM AKST until March 8 at 12:00AM AKST by NWS Juneau AK", + "description": "* WHAT...West winds 20 to 30 mph with gusts up to 50 mph\nexpected.\n\n* WHERE...Western Kupreanof Island and Kuiu Island and Prince of\nWales Island.\n\n* WHEN...From 2 PM this afternoon to midnight AKST tonight.\n\n* IMPACTS...Gusty winds could blow around unsecured objects. Use\nextra caution if traveling by land, sea, or air.\n\n* ADDITIONAL DETAILS...The exact timing of the strongest winds\nremain uncertain given variations in potential storm track.\nAnticipate snow showers in the wake of the system.", + "instruction": "Use extra caution when driving, especially if operating a high\nprofile vehicle. Secure outdoor objects.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "NPWAJK" + ], + "WMOidentifier": [ + "WWAK77 PAJK 071147" + ], + "NWSheadline": [ + "WIND ADVISORY REMAINS IN EFFECT FROM 2 PM THIS AFTERNOON TO MIDNIGHT AKST TONIGHT" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAJK.WI.Y.0021.260307T2300Z-260308T0900Z/" + ], + "eventEndingTime": [ + "2026-03-08T00:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.5a2c92251cbd81c63dec3a75e8ffc8c348dc09a5.004.1,2026-03-06T14:07:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WIY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.004.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.004.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.004.1", + "areaDesc": "Glacier Bay; Eastern Chichagof Island", + "geocode": { + "SAME": [ + "002105" + ], + "UGC": [ + "AKZ320", + "AKZ321" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ320", + "https://api.weather.gov/zones/forecast/AKZ321" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.004.1", + "identifier": "urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.004.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T21:09:00-09:00" + } + ], + "sent": "2026-03-07T02:47:00-09:00", + "effective": "2026-03-07T02:47:00-09:00", + "onset": "2026-03-07T14:00:00-09:00", + "expires": "2026-03-07T11:00:00-09:00", + "ends": "2026-03-08T00:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Wind Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "Wind Advisory issued March 7 at 2:47AM AKST until March 8 at 12:00AM AKST by NWS Juneau AK", + "description": "* WHAT...Southwest winds 25 to 35 mph with gusts up to 55 mph\nexpected.\n\n* WHERE...Glacier Bay and Eastern Chichagof Island.\n\n* WHEN...From 2 PM this afternoon to midnight AKST tonight.\n\n* IMPACTS...Gusty winds could blow around unsecured objects. Use\nextra caution if traveling by land, sea, or air.\n\n* ADDITIONAL DETAILS...The exact timing of the strongest winds\nremain uncertain given variations in potential storm track.\nAnticipate snow showers in the wake of the system.", + "instruction": "Use extra caution when driving, especially if operating a high\nprofile vehicle. Secure outdoor objects.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "NPWAJK" + ], + "WMOidentifier": [ + "WWAK77 PAJK 071147" + ], + "NWSheadline": [ + "WIND ADVISORY REMAINS IN EFFECT FROM 2 PM THIS AFTERNOON TO MIDNIGHT AKST TONIGHT" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAJK.WI.Y.0021.260307T2300Z-260308T0900Z/" + ], + "eventEndingTime": [ + "2026-03-08T00:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.5a2c92251cbd81c63dec3a75e8ffc8c348dc09a5.002.1,2026-03-06T14:07:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WIY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.005.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.005.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.cf8175d216c3fbeec4c0f9de934049bf07904fea.005.1", + "areaDesc": "Admiralty Island; City and Borough of Juneau", + "geocode": { + "SAME": [ + "002105", + "002110" + ], + "UGC": [ + "AKZ324", + "AKZ325" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ324", + "https://api.weather.gov/zones/forecast/AKZ325" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.005.1", + "identifier": "urn:oid:2.49.0.1.840.0.8db533cf4581a204220721ca6a31a84e9b19bbbc.005.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T21:09:00-09:00" + } + ], + "sent": "2026-03-07T02:47:00-09:00", + "effective": "2026-03-07T02:47:00-09:00", + "onset": "2026-03-07T15:00:00-09:00", + "expires": "2026-03-07T11:00:00-09:00", + "ends": "2026-03-08T00:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Wind Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "Wind Advisory issued March 7 at 2:47AM AKST until March 8 at 12:00AM AKST by NWS Juneau AK", + "description": "* WHAT...South winds 20 to 30 mph with gusts up to 50 mph\nexpected.\n\n* WHERE...Admiralty Island and City and Borough of Juneau.\n\n* WHEN...From 3 PM this afternoon to midnight AKST tonight.\n\n* IMPACTS...Gusty winds could blow around unsecured objects. Use\nextra caution if traveling by land, sea, or air.\n\n* ADDITIONAL DETAILS...The exact timing of the strongest winds\nremain uncertain given variations in potential storm track.\nAnticipate snow showers in the wake of the system.", + "instruction": "Use extra caution when driving, especially if operating a high\nprofile vehicle. Secure outdoor objects.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "NPWAJK" + ], + "WMOidentifier": [ + "WWAK77 PAJK 071147" + ], + "NWSheadline": [ + "WIND ADVISORY REMAINS IN EFFECT FROM 3 PM THIS AFTERNOON TO MIDNIGHT AKST TONIGHT" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAJK.WI.Y.0021.260308T0000Z-260308T0900Z/" + ], + "eventEndingTime": [ + "2026-03-08T00:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.5a2c92251cbd81c63dec3a75e8ffc8c348dc09a5.003.1,2026-03-06T14:07:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WIY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.001.1", + "areaDesc": "City and Borough of Yakutat", + "geocode": { + "SAME": [ + "002282" + ], + "UGC": [ + "AKZ317" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ317" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4715a94eaa71113cab7034766618bf19aba89976.002.1", + "identifier": "urn:oid:2.49.0.1.840.0.4715a94eaa71113cab7034766618bf19aba89976.002.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:16:00-09:00" + } + ], + "sent": "2026-03-07T02:10:00-09:00", + "effective": "2026-03-07T02:10:00-09:00", + "onset": "2026-03-07T03:00:00-09:00", + "expires": "2026-03-07T10:15:00-09:00", + "ends": "2026-03-07T18:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "Winter Weather Advisory issued March 7 at 2:10AM AKST until March 7 at 6:00PM AKST by NWS Juneau AK", + "description": "...SNOWFALL EXPECTED SATURDAY FOR PORTIONS OF NORTHERN SE AK...\n\n* WHAT...Snow expected. Total snow accumulations of 4 to 6 inches.\n\n* WHERE...City and Borough of Yakutat.\n\n* WHEN...Until 6 PM AKST this evening.\n\n* IMPACTS...Travel could be very difficult.\n\n* ADDITIONAL DETAILS...The greatest snowfall rates will occur\nSaturday morning.", + "instruction": "Slow down and use caution while traveling.\n\nPeople are urged to prepare their property before the onset of\nwinter weather.\n\nFor the latest road conditions, where available, call 5 1 1 or\nvisit 511.alaska.gov.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAJK" + ], + "WMOidentifier": [ + "WWAK47 PAJK 071110" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 6 PM AKST THIS EVENING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAJK.WW.Y.0018.260307T1200Z-260308T0300Z/" + ], + "eventEndingTime": [ + "2026-03-07T18:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.824113698da22f1012fa35611b771527aef8c6fd.001.1,2026-03-06T13:57:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.002.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.3dfdf5337152bc1c27f703e2e7911cb52fa40d3f.002.1", + "areaDesc": "City and Borough of Juneau", + "geocode": { + "SAME": [ + "002110" + ], + "UGC": [ + "AKZ325" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ325" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4715a94eaa71113cab7034766618bf19aba89976.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.4715a94eaa71113cab7034766618bf19aba89976.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:16:00-09:00" + } + ], + "sent": "2026-03-07T02:10:00-09:00", + "effective": "2026-03-07T02:10:00-09:00", + "onset": "2026-03-07T15:00:00-09:00", + "expires": "2026-03-07T10:15:00-09:00", + "ends": "2026-03-08T03:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Juneau AK", + "headline": "Winter Weather Advisory issued March 7 at 2:10AM AKST until March 8 at 4:00AM AKDT by NWS Juneau AK", + "description": "...SNOWFALL EXPECTED SATURDAY FOR PORTIONS OF NORTHERN SE AK...\n\n* WHAT...Snow expected. Total snow accumulations of 4 to 6\ninches. Winds gusting as high as 50 mph.\n\n* WHERE...City and Borough of Juneau.\n\n* WHEN...From 3 PM this afternoon to 4 AM AKST Sunday.\n\n* IMPACTS...Travel could be very difficult. Gusty winds could\nbring down tree branches.\n\n* ADDITIONAL DETAILS...Snow accumulations will be highly\nvariable, as snow showers set up behind a fast-moving system.", + "instruction": "Slow down and use caution while traveling.\n\nPeople are urged to prepare their property before the onset of\nwinter weather.\n\nFor the latest road conditions, where available, call 5 1 1 or\nvisit 511.alaska.gov.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAJK" + ], + "WMOidentifier": [ + "WWAK47 PAJK 071110" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT FROM 3 PM THIS AFTERNOON TO 4 AM AKST SUNDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAJK.WW.Y.0018.260308T0000Z-260308T1200Z/" + ], + "eventEndingTime": [ + "2026-03-08T03:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.824113698da22f1012fa35611b771527aef8c6fd.002.1,2026-03-06T13:57:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.001.1", + "areaDesc": "Kuskokwim Delta Coast and Nunivak Island; Interior Kuskokwim Delta; Western Capes", + "geocode": { + "SAME": [ + "002050" + ], + "UGC": [ + "AKZ755", + "AKZ756", + "AKZ757" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ755", + "https://api.weather.gov/zones/forecast/AKZ756", + "https://api.weather.gov/zones/forecast/AKZ757" + ], + "references": [], + "sent": "2026-03-07T01:42:00-09:00", + "effective": "2026-03-07T01:42:00-09:00", + "onset": "2026-03-07T01:42:00-09:00", + "expires": "2026-03-07T17:30:00-09:00", + "ends": "2026-03-09T12:00:00-09:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Cold Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Cold Weather Advisory issued March 7 at 1:42AM AKST until March 9 at 1:00PM AKDT by NWS Anchorage AK", + "description": "* WHAT...Very cold wind chills from 20 below to 40 below.\n\n* WHERE...Kuskokwim Delta, and Western Capes.\n\n* WHEN...Until 1 PM AKDT Monday.\n\n* IMPACTS...The dangerously cold wind chills as low as 40 below zero\ncould cause frostbite on exposed skin in as little as 10 minutes.\nFrostbite and hypothermia are likely if exposed to these\ntemperatures. Wind chill values can lead to hypothermia with\nprolonged exposure.\n\n* ADDITIONAL DETAILS...Cold northerly flow and enhanced wind gusts\nwill lead to a period of frigid wind chills over the weekend\nthrough Monday morning. Winds expected to be relatively stronger\nalong the coast, but temperatures will be lower inland near\nBethel. Expect coldest temperatures overnight, increasing during\ndaytime hours, and returning to frigid conditions overnight. By\nMonday afternoon, a slight warming trend and decrease in wind\nspeeds will occur, raising wind chills closer to 10 below.", + "instruction": "Use caution while traveling outside. Wear appropriate clothing, a\nhat, and gloves.\n\nKeep pets indoors as much as possible.\n\nMake frequent checks on older family, friends, and neighbors. Ensure\nportable heaters are used correctly. Do not use generators or grills\ninside.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "NPWALU" + ], + "WMOidentifier": [ + "WWAK72 PAFC 071042" + ], + "NWSheadline": [ + "COLD WEATHER ADVISORY IN EFFECT UNTIL 1 PM AKDT MONDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.EXA.PAFC.CW.Y.0013.000000T0000Z-260309T2100Z/" + ], + "eventEndingTime": [ + "2026-03-09T12:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "CWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.002.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4bb037ec571d12a99b9a6094561108ce5a94e0c3.002.1", + "areaDesc": "Central Alaska Peninsula; Chignik; Southern Alaska Peninsula", + "geocode": { + "SAME": [ + "002164", + "002013" + ], + "UGC": [ + "AKZ761", + "AKZ773", + "AKZ781" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ761", + "https://api.weather.gov/zones/forecast/AKZ773", + "https://api.weather.gov/zones/forecast/AKZ781" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.004451a0127288b99603ae855d6d77ccb46f5772.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.004451a0127288b99603ae855d6d77ccb46f5772.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T15:52:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.b4a951024e726078964bada8f0f75f27535254be.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.b4a951024e726078964bada8f0f75f27535254be.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T16:04:00-09:00" + } + ], + "sent": "2026-03-07T01:42:00-09:00", + "effective": "2026-03-07T01:42:00-09:00", + "onset": "2026-03-07T01:42:00-09:00", + "expires": "2026-03-07T17:30:00-09:00", + "ends": "2026-03-09T12:00:00-09:00", "status": "Actual", - "messageType": "Alert", + "messageType": "Update", "category": "Met", - "severity": "Minor", - "certainty": "Very Likely", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Cold Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Cold Weather Advisory issued March 7 at 1:42AM AKST until March 9 at 1:00PM AKDT by NWS Anchorage AK", + "description": "* WHAT...Very cold wind chills from 10 below to 25 below expected.\n\n* WHERE...Central Alaska Peninsula, Chignik, and Southern Alaska\nPeninsula.\n\n* WHEN...Until 1 PM AKDT Monday.\n\n* IMPACTS...Dangerously cold wind chills as low as 25 below zero\ncould cause frostbite on exposed skin in as little as 30 minutes.\nFrostbite and hypothermia are likely if exposed to these\ntemperatures. Wind chill values can lead to hypothermia with\nprolonged exposure.\n\n* ADDITIONAL DETAILS...Cold northerly flow and enhanced wind gusts\nwill lead to a period of frigid wind chills over the weekend\nthrough Monday morning. Expect coldest temperatures overnight,\nincreasing during daytime hours, and returning to frigid\nconditions overnight. By Monday afternoon, a slight warming trend\nwill occur, raising wind chills closer to zero.", + "instruction": "Use caution while traveling outside. Wear appropriate clothing, a\nhat, and gloves.\n\nKeep pets indoors as much as possible.\n\nMake frequent checks on older family, friends, and neighbors. Ensure\nportable heaters are used correctly. Do not use generators or grills\ninside.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "NPWALU" + ], + "WMOidentifier": [ + "WWAK72 PAFC 071042" + ], + "NWSheadline": [ + "COLD WEATHER ADVISORY REMAINS IN EFFECT UNTIL 1 PM AKDT MONDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFC.CW.Y.0013.000000T0000Z-260309T2100Z/" + ], + "eventEndingTime": [ + "2026-03-09T12:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "CWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.005.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.005.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.005.1", + "areaDesc": "Western Susitna Valley; Southern Susitna Valley; Central Susitna Valley; Northern Susitna Valley", + "geocode": { + "SAME": [ + "002170" + ], + "UGC": [ + "AKZ745", + "AKZ746", + "AKZ747", + "AKZ748" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ745", + "https://api.weather.gov/zones/forecast/AKZ746", + "https://api.weather.gov/zones/forecast/AKZ747", + "https://api.weather.gov/zones/forecast/AKZ748" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.007.1", + "identifier": "urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.007.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T15:02:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.008.1", + "identifier": "urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.008.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T16:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.007.1", + "identifier": "urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.007.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:36:00-09:00" + } + ], + "sent": "2026-03-06T20:48:00-09:00", + "effective": "2026-03-06T20:48:00-09:00", + "onset": "2026-03-06T20:48:00-09:00", + "expires": "2026-03-07T05:00:00-09:00", + "ends": "2026-03-07T05:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Winter Weather Advisory issued March 6 at 8:48PM AKST until March 7 at 5:00AM AKST by NWS Anchorage AK", + "description": "* WHAT...Snow. Additional snow accumulations between 1 and 3 inches.\n\n* WHERE...Susitna Valley.\n\n* WHEN...Until 5 AM AKST Saturday.\n\n* IMPACTS...Travel could be very difficult.", + "instruction": "Slow down and use caution while traveling. For the latest road\nconditions call 5 1 1 or visit 511.alaska.gov.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAER" + ], + "WMOidentifier": [ + "WWAK41 PAFC 070548" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 5 AM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFC.WW.Y.0031.000000T0000Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T05:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.e20f3e558cdda4decbad8ff40d8225439f91a3ae.008.1,2026-03-06T09:07:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.90b5fdb856e2083ddc254799ba587bcd02e53b77.009.1,2026-03-06T04:27:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.eb34f50ad92322ff0b6b9a9d7074366560d17d67.007.1,2026-03-05T14:53:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.6eaf0fe210c9faf4eb1d3f59a99764cc54793e90.006.1,2026-03-05T05:09:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.004.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.004.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.004.1", + "areaDesc": "Thompson Pass; Ernestine", + "geocode": { + "SAME": [ + "002063", + "002066" + ], + "UGC": [ + "AKZ732", + "AKZ744" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ732", + "https://api.weather.gov/zones/forecast/AKZ744" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.007.1", + "identifier": "urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.007.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T16:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.006.1", + "identifier": "urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.006.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:36:00-09:00" + } + ], + "sent": "2026-03-06T20:48:00-09:00", + "effective": "2026-03-06T20:48:00-09:00", + "onset": "2026-03-06T20:48:00-09:00", + "expires": "2026-03-07T05:00:00-09:00", + "ends": "2026-03-07T05:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Winter Weather Advisory issued March 6 at 8:48PM AKST until March 7 at 5:00AM AKST by NWS Anchorage AK", + "description": "* WHAT...Snow. Additional snow accumulations between 2 and 6 inches.\nWinds gusting as high as 40 mph. Visibility as low as one half\nmile or less at times.\n\n* WHERE...Ernestine and Thompson Pass.\n\n* WHEN...Until 5 AM AKST Saturday.\n\n* IMPACTS...Travel could be very difficult. Areas of blowing snow\ncould significantly reduce visibility.", + "instruction": "Slow down and use caution while traveling. For the latest road\nconditions call 5 1 1 or visit 511.alaska.gov.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAER" + ], + "WMOidentifier": [ + "WWAK41 PAFC 070548" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 5 AM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFC.WW.Y.0031.000000T0000Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T05:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.e20f3e558cdda4decbad8ff40d8225439f91a3ae.007.1,2026-03-06T09:07:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.90b5fdb856e2083ddc254799ba587bcd02e53b77.007.1,2026-03-06T04:27:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.006.1,2026-03-06T15:02:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.eb34f50ad92322ff0b6b9a9d7074366560d17d67.008.1,2026-03-05T14:53:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.6eaf0fe210c9faf4eb1d3f59a99764cc54793e90.007.1,2026-03-05T05:09:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.003.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.003.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.003.1", + "areaDesc": "Anchorage; Anchorage Hillside / Eagle River; Lower Matanuska Valley", + "geocode": { + "SAME": [ + "002020", + "002170" + ], + "UGC": [ + "AKZ701", + "AKZ702", + "AKZ711" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ701", + "https://api.weather.gov/zones/forecast/AKZ702", + "https://api.weather.gov/zones/forecast/AKZ711" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.009.1", + "identifier": "urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.009.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T15:02:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T16:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:36:00-09:00" + } + ], + "sent": "2026-03-06T20:48:00-09:00", + "effective": "2026-03-06T20:48:00-09:00", + "onset": "2026-03-06T20:48:00-09:00", + "expires": "2026-03-07T06:00:00-09:00", + "ends": "2026-03-07T06:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Winter Weather Advisory issued March 6 at 8:48PM AKST until March 7 at 6:00AM AKST by NWS Anchorage AK", + "description": "* WHAT...Snow. Additional snow accumulations between 1 and 3 inches,\nmainly in the Mat Valley.\n\n* WHERE...Anchorage / Eagle River (all elevations), and Lower\nMatanuska Valley.\n\n* WHEN...Until 6 AM AKST Saturday.\n\n* IMPACTS...Travel could be very difficult.", + "instruction": "Slow down and use caution while traveling. For the latest road\nconditions call 5 1 1 or visit 511.alaska.gov.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAER" + ], + "WMOidentifier": [ + "WWAK41 PAFC 070548" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 6 AM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFC.WW.Y.0031.000000T0000Z-260307T1500Z/" + ], + "eventEndingTime": [ + "2026-03-07T06:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.e20f3e558cdda4decbad8ff40d8225439f91a3ae.010.1,2026-03-06T09:07:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.90b5fdb856e2083ddc254799ba587bcd02e53b77.002.1,2026-03-06T04:27:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.006.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.006.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.91084e53c81281520f75c505a39e76136971cd3f.006.1", + "areaDesc": "Southern Copper Valley; McCarthy", + "geocode": { + "SAME": [ + "002066" + ], + "UGC": [ + "AKZ749", + "AKZ751" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ749", + "https://api.weather.gov/zones/forecast/AKZ751" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.008.1", + "identifier": "urn:oid:2.49.0.1.840.0.20135eb2ba906345cfeb11f5d2727dd003e9a8bd.008.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T15:02:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.009.1", + "identifier": "urn:oid:2.49.0.1.840.0.bb9012ee63f58108a69106736a41e48568f0e2a6.009.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T16:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.008.1", + "identifier": "urn:oid:2.49.0.1.840.0.f6296ebb12df41221922f8dc5a2f0d678865c93f.008.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T18:36:00-09:00" + } + ], + "sent": "2026-03-06T20:48:00-09:00", + "effective": "2026-03-06T20:48:00-09:00", + "onset": "2026-03-06T20:48:00-09:00", + "expires": "2026-03-07T05:00:00-09:00", + "ends": "2026-03-07T05:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", "urgency": "Expected", - "event": "Heat Advisory", - "headline": "Heat Advisory issued October 01 at 8:40AM PDT until October 03 at 9:00PM PDT by NWS", - "description": "SUMMARY TEXT", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Anchorage AK", + "headline": "Winter Weather Advisory issued March 6 at 8:48PM AKST until March 7 at 5:00AM AKST by NWS Anchorage AK", + "description": "* WHAT...Mixed precipitation. Additional snow accumulations up to 2\ninches and ice accumulations around a light glaze. Winds gusting\nas high as 30 mph.\n\n* WHERE...McCarthy and Southern Copper Valley.\n\n* WHEN...Until 5 AM AKST Saturday.\n\n* IMPACTS...Travel could be very difficult. Areas of blowing snow\ncould significantly reduce visibility.\n\n* ADDITIONAL DETAILS...If temperatures warm above freezing, rain\nfalling onto snow covered and frozen roadways may freeze on\ncontact leading to slippery conditions.", + "instruction": "Slow down and use caution while traveling. For the latest road\nconditions call 5 1 1 or visit 511.alaska.gov.", + "response": "Execute", "parameters": { - "VTEC": ["/O.NEW.KMTR.HT.Y.0002.141002T1900Z-141004T0400Z/"] + "AWIPSidentifier": [ + "WSWAER" + ], + "WMOidentifier": [ + "WWAK41 PAFC 070548" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 5 AM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFC.WW.Y.0031.000000T0000Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T05:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.e20f3e558cdda4decbad8ff40d8225439f91a3ae.009.1,2026-03-06T09:07:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.90b5fdb856e2083ddc254799ba587bcd02e53b77.010.1,2026-03-06T04:27:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.eb34f50ad92322ff0b6b9a9d7074366560d17d67.009.1,2026-03-05T14:53:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.6eaf0fe210c9faf4eb1d3f59a99764cc54793e90.008.1,2026-03-05T05:09:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] } } }, { - "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2222", + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.002.1", "type": "Feature", "geometry": null, "properties": { - "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2222", - "id": "urn:oid:2.49.0.1.840.0.2222", - "areaDesc": "Coastal North Bay Including Point Reyes National Seashore", + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.002.1", + "areaDesc": "Central Beaufort Sea Coast; Eastern Beaufort Sea Coast; Central Arctic Plains", "geocode": { - "SAME": ["006001", "006013", "006041", "006053", "006055", "006069", "006075", "006081", "006085", "006087", "006097"], - "UGC": ["CAZ006", "CAZ505", "CAZ506", "CAZ507", "CAZ508", "CAZ509", "CAZ510", "CAZ511", "CAZ512", "CAZ513", "CAZ516", "CAZ517", "CAZ518", "CAZ528", "CAZ529", "CAZ530"] + "SAME": [ + "002185" + ], + "UGC": [ + "AKZ804", + "AKZ805", + "AKZ808" + ] }, - "sent": "2014-10-01T08:40:00-07:00", - "effective": "2014-10-01T08:40:00-07:00", - "onset": "2014-10-01T08:40:00-07:00", - "expires": "2014-10-03T21:00:00-07:00", + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ804", + "https://api.weather.gov/zones/forecast/AKZ805", + "https://api.weather.gov/zones/forecast/AKZ808" + ], + "references": [], + "sent": "2026-03-06T14:15:00-09:00", + "effective": "2026-03-06T14:15:00-09:00", + "onset": "2026-03-08T15:00:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-11T15:00:00-09:00", "status": "Actual", "messageType": "Alert", "category": "Met", - "severity": "Minor", + "severity": "Severe", + "certainty": "Possible", + "urgency": "Future", + "event": "Winter Storm Watch", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Storm Watch issued March 6 at 2:15PM AKST until March 11 at 4:00PM AKDT by NWS Fairbanks AK", + "description": "* WHAT...Blizzard conditions possible. Winds could gust as high as\n55 mph.\n\n* WHERE...Central Arctic Plains, Central Beaufort Sea Coast, and\nEastern Beaufort Sea Coast.\n\n* WHEN...From Sunday afternoon through Wednesday afternoon.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/4 mile or less.", + "instruction": "Prepare for possible blizzard conditions. Continue to monitor the\nlatest forecasts for updates on this situation.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "WSWNSB" + ], + "WMOidentifier": [ + "WWAK41 PAFG 062315" + ], + "NWSheadline": [ + "WINTER STORM WATCH IN EFFECT FROM SUNDAY AFTERNOON THROUGH WEDNESDAY AFTERNOON" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.PAFG.WS.A.0023.260309T0000Z-260312T0000Z/" + ], + "eventEndingTime": [ + "2026-03-11T15:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "WSA" + ], + "NationalWeatherService": [ + "WSA" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.36f13a9426272b67c74b378041744b5467a20992.001.1", + "areaDesc": "Western Arctic Coast", + "geocode": { + "SAME": [ + "002185" + ], + "UGC": [ + "AKZ801" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ801" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.cec793a9584a117541384a6311f91b011334fb03.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.cec793a9584a117541384a6311f91b011334fb03.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:49:00-09:00" + } + ], + "sent": "2026-03-06T14:15:00-09:00", + "effective": "2026-03-06T14:15:00-09:00", + "onset": "2026-03-06T14:15:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", "certainty": "Likely", "urgency": "Expected", - "event": "Flood Advisory", - "headline": "Flood Advisory issued October 01", - "description": "Flood advisory details", - "parameters": {} + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 2:15PM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blowing snow. Winds gusting as high as 40 mph.\n\n* WHERE...Western Arctic Coast.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/2 mile or less at times.", + "instruction": "Use caution while traveling.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWNSB" + ], + "WMOidentifier": [ + "WWAK41 PAFG 062315" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0034.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.002.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.002.1", + "areaDesc": "Dalton Highway Summits; White Mountains and High Terrain South of the Yukon River; Fortymile Country", + "geocode": { + "SAME": [ + "002290", + "002240" + ], + "UGC": [ + "AKZ832", + "AKZ834", + "AKZ835" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ832", + "https://api.weather.gov/zones/forecast/AKZ834", + "https://api.weather.gov/zones/forecast/AKZ835" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.005.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.005.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + } + ], + "sent": "2026-03-06T11:21:00-09:00", + "effective": "2026-03-06T11:21:00-09:00", + "onset": "2026-03-06T11:21:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:21AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Snow and blowing snow. Total snow accumulations between 2\nand 4 inches. Winds gusting as high as 40 mph.\n\n* WHERE...Dalton Highway Summits, Fortymile Country, and White\nMountains and High Terrain South of the Yukon River.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Travel could be difficult. Areas of blowing snow could\nsignificantly reduce visibility.", + "instruction": "Slow down and use caution while traveling. Visit 511.alaska.gov or\ncall 5 1 1 for the latest road conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAFG" + ], + "WMOidentifier": [ + "WWAK43 PAFG 062021" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0032.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.bb5bc5b40af392c04978c15aec5130832a32ff0c.003.1,2026-03-04T19:33:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.c527e7ef778fe9823732b64a45f1c63f1cc8072a.003.1,2026-03-04T19:32:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.439bb78f86baaf7cc60afbfba017c21bc402870f.001.1,2026-03-04T14:31:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.005.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.005.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.005.1", + "areaDesc": "Upper Chena River Valley; Eielson AFB and Salcha; Goldstream Valley and Nenana Hills; Chatanika River Valley; Two Rivers; Fairbanks Metro Area; Nenana; Central Interior", + "geocode": { + "SAME": [ + "002090", + "002290" + ], + "UGC": [ + "AKZ838", + "AKZ840", + "AKZ841", + "AKZ842", + "AKZ843", + "AKZ844", + "AKZ845", + "AKZ846" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ838", + "https://api.weather.gov/zones/forecast/AKZ840", + "https://api.weather.gov/zones/forecast/AKZ841", + "https://api.weather.gov/zones/forecast/AKZ842", + "https://api.weather.gov/zones/forecast/AKZ843", + "https://api.weather.gov/zones/forecast/AKZ844", + "https://api.weather.gov/zones/forecast/AKZ845", + "https://api.weather.gov/zones/forecast/AKZ846" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.004.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.004.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + } + ], + "sent": "2026-03-06T11:21:00-09:00", + "effective": "2026-03-06T11:21:00-09:00", + "onset": "2026-03-06T15:00:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:21AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Snow. Total snow accumulations between 2 and 4 inches.\n\n* WHERE...Central Interior, Chatanika River Valley, Eielson AFB and\nSalcha, Fairbanks Metro Area, Goldstream Valley and Nenana Hills,\nNenana, Two Rivers, and Upper Chena River Valley.\n\n* WHEN...From 3 PM this afternoon to 9 PM AKST Saturday.\n\n* IMPACTS...Travel could be difficult.", + "instruction": "Slow down and use caution while traveling. Visit 511.alaska.gov or\ncall 5 1 1 for the latest road conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAFG" + ], + "WMOidentifier": [ + "WWAK43 PAFG 062021" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT FROM 3 PM THIS AFTERNOON TO 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0032.260307T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.001.1", + "areaDesc": "Eastern Alaska Range South of Trims Camp", + "geocode": { + "SAME": [ + "002240" + ], + "UGC": [ + "AKZ850" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ850" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + } + ], + "sent": "2026-03-06T11:21:00-09:00", + "effective": "2026-03-06T11:21:00-09:00", + "onset": "2026-03-06T11:21:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Storm Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Storm Warning issued March 6 at 11:21AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Heavy snow. Total snow accumulations between 6 and 12\ninches. Winds gusting as high as 30 mph.\n\n* WHERE...Eastern Alaska Range South of Trims Camp.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Travel could be very difficult. Areas of blowing snow\ncould significantly reduce visibility.", + "instruction": "If you must travel, keep an extra flashlight, food, and water in\nyour vehicle in case of an emergency. Visit 511.alaska.gov or call 5\n1 1 for the latest road conditions.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "WSWAFG" + ], + "WMOidentifier": [ + "WWAK43 PAFG 062021" + ], + "NWSheadline": [ + "WINTER STORM WARNING REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.PAFG.WS.W.0013.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.bb5bc5b40af392c04978c15aec5130832a32ff0c.001.1,2026-03-04T19:33:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.c527e7ef778fe9823732b64a45f1c63f1cc8072a.001.2,2026-03-04T19:32:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "WSW" + ], + "NationalWeatherService": [ + "WSW" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.003.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.003.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.003.1", + "areaDesc": "Delta Junction; Tanana Flats; Eastern Alaska Range North of Trims Camp", + "geocode": { + "SAME": [ + "002240", + "002090" + ], + "UGC": [ + "AKZ837", + "AKZ839", + "AKZ849" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ837", + "https://api.weather.gov/zones/forecast/AKZ839", + "https://api.weather.gov/zones/forecast/AKZ849" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.006.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.006.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + } + ], + "sent": "2026-03-06T11:21:00-09:00", + "effective": "2026-03-06T11:21:00-09:00", + "onset": "2026-03-06T11:21:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:21AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Snow and blowing snow. Total snow accumulations between 2\nand 4 inches. Winds gusting as high as 50 mph in Delta Junction.\n\n* WHERE...Delta Junction, Eastern Alaska Range North of Trims Camp,\nand Tanana Flats.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Travel could be difficult. Areas of blowing snow could\nsignificantly reduce visibility.", + "instruction": "Slow down and use caution while traveling. Visit 511.alaska.gov or\ncall 5 1 1 for the latest road conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAFG" + ], + "WMOidentifier": [ + "WWAK43 PAFG 062021" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0032.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ], + "expiredReferences": [ + "w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.bb5bc5b40af392c04978c15aec5130832a32ff0c.002.1,2026-03-04T19:33:00-09:00 w-nws.webmaster@noaa.gov,urn:oid:2.49.0.1.840.0.c527e7ef778fe9823732b64a45f1c63f1cc8072a.002.1,2026-03-04T19:32:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.004.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.004.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.4f74509cb73681d01fa7f782a52f15394d9c1a3d.004.1", + "areaDesc": "Northern Denali Borough; Southern Denali Borough", + "geocode": { + "SAME": [ + "002068" + ], + "UGC": [ + "AKZ847", + "AKZ848" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ847", + "https://api.weather.gov/zones/forecast/AKZ848" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.002.1", + "identifier": "urn:oid:2.49.0.1.840.0.2c9ac147c123595dbb904112ff4cd4613db4e630.002.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:44:00-09:00" + } + ], + "sent": "2026-03-06T11:21:00-09:00", + "effective": "2026-03-06T11:21:00-09:00", + "onset": "2026-03-06T11:21:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:21AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Snow. Total snow accumulations between 3 and 6 inches.\n\n* WHERE...Northern Denali Borough and Southern Denali Borough.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Travel could be difficult.", + "instruction": "Slow down and use caution while traveling. Visit 511.alaska.gov or\ncall 5 1 1 for the latest road conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWAFG" + ], + "WMOidentifier": [ + "WWAK43 PAFG 062021" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0032.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "areaDesc": "Shishmaref; Bering Strait Coast", + "geocode": { + "SAME": [ + "002180" + ], + "UGC": [ + "AKZ820", + "AKZ821" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ820", + "https://api.weather.gov/zones/forecast/AKZ821" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.001.2", + "identifier": "urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.001.2", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T09:38:00-09:00" + } + ], + "sent": "2026-03-06T11:11:00-09:00", + "effective": "2026-03-06T11:11:00-09:00", + "onset": "2026-03-06T11:11:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Extreme", + "certainty": "Likely", + "urgency": "Expected", + "event": "Blizzard Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Blizzard Warning issued March 6 at 11:11AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blizzard conditions. Winds gusting as high as 50 mph.\n\n* WHERE...Bering Strait Coast and Diomede.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/4 mile or less at times.", + "instruction": "Travel should be restricted to emergencies only. If you must travel,\nhave a winter survival kit with you. If you get stranded, stay with\nyour vehicle.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "WSWWCZ" + ], + "WMOidentifier": [ + "WWAK42 PAFG 062011" + ], + "NWSheadline": [ + "BLIZZARD WARNING REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.PAFG.BZ.W.0021.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "BZW" + ], + "NationalWeatherService": [ + "BZW" + ] + } } }, { - "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3333", + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.002.1", "type": "Feature", "geometry": null, "properties": { - "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.3333", - "id": "urn:oid:2.49.0.1.840.0.3333", - "areaDesc": "Some Area", + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.002.1", + "areaDesc": "St Lawrence Island", "geocode": { - "SAME": ["006001"], - "UGC": ["CAZ006"] + "SAME": [ + "002180" + ], + "UGC": [ + "AKZ827" + ] }, - "sent": "2014-10-01T08:40:00-07:00", - "effective": "2014-10-01T08:40:00-07:00", - "onset": "2014-10-01T08:40:00-07:00", - "expires": "2014-10-03T21:00:00-07:00", + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ827" + ], + "references": [], + "sent": "2026-03-06T11:11:00-09:00", + "effective": "2026-03-06T11:11:00-09:00", + "onset": "2026-03-06T11:11:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", "status": "Actual", "messageType": "Alert", "category": "Met", - "severity": "Minor", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:11AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blowing snow. Winds gusting as high as 50 mph.\n\n* WHERE...St Lawrence Island.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/2 mile or less at times.", + "instruction": "Use caution while traveling.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWWCZ" + ], + "WMOidentifier": [ + "WWAK42 PAFG 062011" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.EXA.PAFG.WW.Y.0033.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.004.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.004.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.004.1", + "areaDesc": "Eastern Norton Sound and Nulato Hills", + "geocode": { + "SAME": [ + "002180" + ], + "UGC": [ + "AKZ824" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ824" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.002.1", + "identifier": "urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.002.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T09:38:00-09:00" + } + ], + "sent": "2026-03-06T11:11:00-09:00", + "effective": "2026-03-06T11:11:00-09:00", + "onset": "2026-03-06T11:11:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", + "certainty": "Likely", + "urgency": "Expected", + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:11AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blowing snow. Winds gusting as high as 50 mph.\n\n* WHERE...Shaktoolik.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/2 mile or less at times.", + "instruction": "Use caution while traveling.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWWCZ" + ], + "WMOidentifier": [ + "WWAK42 PAFG 062011" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0033.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } + } + }, + { + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.003.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.003.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.003.1", + "areaDesc": "Kivalina and Red Dog Dock", + "geocode": { + "SAME": [ + "002188" + ], + "UGC": [ + "AKZ815" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ815" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.002.1", + "identifier": "urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.002.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.003.1", + "identifier": "urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.003.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T09:38:00-09:00" + } + ], + "sent": "2026-03-06T11:11:00-09:00", + "effective": "2026-03-06T11:11:00-09:00", + "onset": "2026-03-06T11:11:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Moderate", "certainty": "Likely", "urgency": "Expected", - "event": "Tornado Warning", - "headline": "Tornado Warning issued October 01", - "description": "Tornado warning details", - "parameters": {} + "event": "Winter Weather Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Winter Weather Advisory issued March 6 at 11:11AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blowing snow. Winds gusting as high as 50 mph.\n\n* WHERE...Kivalina and Red Dog Dock.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/2 mile or less at times.", + "instruction": "Use caution while traveling.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "WSWWCZ" + ], + "WMOidentifier": [ + "WWAK42 PAFG 062011" + ], + "NWSheadline": [ + "WINTER WEATHER ADVISORY REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.CON.PAFG.WW.Y.0033.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "WWY" + ] + } } } - ] -} + ], + "title": "Current watches, warnings, and advisories", + "updated": "2026-03-07T11:45:00+00:00" +} \ No newline at end of file diff --git a/spec/fixtures/features/blizzard_warning.json b/spec/fixtures/features/blizzard_warning.json new file mode 100644 index 0000000..8278f80 --- /dev/null +++ b/spec/fixtures/features/blizzard_warning.json @@ -0,0 +1,93 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.9c716ad61d3d1ad983f1b779a88cb3409299718e.001.1", + "areaDesc": "Shishmaref; Bering Strait Coast", + "geocode": { + "SAME": [ + "002180" + ], + "UGC": [ + "AKZ820", + "AKZ821" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/AKZ820", + "https://api.weather.gov/zones/forecast/AKZ821" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.001.2", + "identifier": "urn:oid:2.49.0.1.840.0.65503b3a669b5fa4002da1bd7b5b14911215c819.001.2", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-05T14:48:00-09:00" + }, + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.a4ec77aab589b879f018434c9342f287a88fbd9d.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-06T09:38:00-09:00" + } + ], + "sent": "2026-03-06T11:11:00-09:00", + "effective": "2026-03-06T11:11:00-09:00", + "onset": "2026-03-06T11:11:00-09:00", + "expires": "2026-03-07T16:00:00-09:00", + "ends": "2026-03-07T21:00:00-09:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Extreme", + "certainty": "Likely", + "urgency": "Expected", + "event": "Blizzard Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Fairbanks AK", + "headline": "Blizzard Warning issued March 6 at 11:11AM AKST until March 7 at 9:00PM AKST by NWS Fairbanks AK", + "description": "* WHAT...Blizzard conditions. Winds gusting as high as 50 mph.\n\n* WHERE...Bering Strait Coast and Diomede.\n\n* WHEN...Until 9 PM AKST Saturday.\n\n* IMPACTS...Areas of blowing snow could significantly reduce\nvisibility to 1/4 mile or less at times.", + "instruction": "Travel should be restricted to emergencies only. If you must travel,\nhave a winter survival kit with you. If you get stranded, stay with\nyour vehicle.", + "response": "Prepare", + "parameters": { + "AWIPSidentifier": [ + "WSWWCZ" + ], + "WMOidentifier": [ + "WWAK42 PAFG 062011" + ], + "NWSheadline": [ + "BLIZZARD WARNING REMAINS IN EFFECT UNTIL 9 PM AKST SATURDAY" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.PAFG.BZ.W.0021.000000T0000Z-260308T0600Z/" + ], + "eventEndingTime": [ + "2026-03-07T21:00:00-09:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "BZW" + ], + "NationalWeatherService": [ + "BZW" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/features/empty_geocode.json b/spec/fixtures/features/empty_geocode.json new file mode 100644 index 0000000..1a24fe8 --- /dev/null +++ b/spec/fixtures/features/empty_geocode.json @@ -0,0 +1,34 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.empty-geocode", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [-81.79, 27.35], + [-81.89, 27.14], + [-81.79, 27.35] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.empty-geocode", + "id": "urn:oid:2.49.0.1.840.0.empty-geocode", + "areaDesc": "Some Area", + "geocode": {}, + "sent": "2026-03-07T08:00:00-06:00", + "effective": "2026-03-07T08:00:00-06:00", + "onset": "2026-03-07T08:00:00-06:00", + "expires": "2026-03-07T12:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Likely", + "urgency": "Expected", + "event": "Heat Advisory", + "headline": "Heat Advisory", + "description": "Heat advisory details", + "parameters": {} + } +} diff --git a/spec/fixtures/features/flood_advisory.json b/spec/fixtures/features/flood_advisory.json new file mode 100644 index 0000000..a4f6838 --- /dev/null +++ b/spec/fixtures/features/flood_advisory.json @@ -0,0 +1,156 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -90.61, + 38.07 + ], + [ + -90.61, + 38.02 + ], + [ + -90.63, + 38.01 + ], + [ + -90.58, + 38 + ], + [ + -90.42, + 38.04 + ], + [ + -90.34, + 38.09 + ], + [ + -90.28, + 38.09 + ], + [ + -90.25, + 38.12 + ], + [ + -90.25, + 38.13 + ], + [ + -90.22, + 38.09 + ], + [ + -90, + 37.96 + ], + [ + -89.93, + 37.96 + ], + [ + -89.97, + 37.93 + ], + [ + -89.94, + 37.87 + ], + [ + -90.15, + 37.64 + ], + [ + -90.65, + 37.64 + ], + [ + -90.64, + 38.08 + ], + [ + -90.61, + 38.07 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.17f79d865c378671c28c0846ac087c5e8970f1e6.001.1", + "areaDesc": "Ste. Genevieve, MO; St. Francois, MO", + "geocode": { + "SAME": [ + "029186", + "029187" + ], + "UGC": [ + "MOC186", + "MOC187" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC186", + "https://api.weather.gov/zones/county/MOC187" + ], + "references": [], + "sent": "2026-03-07T05:05:00-06:00", + "effective": "2026-03-07T05:05:00-06:00", + "onset": "2026-03-07T05:05:00-06:00", + "expires": "2026-03-07T10:00:00-06:00", + "ends": "2026-03-07T10:00:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Minor", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Advisory", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS St Louis MO", + "headline": "Flood Advisory issued March 7 at 5:05AM CST until March 7 at 10:00AM CST by NWS St Louis MO", + "description": "* WHAT...Flooding caused by excessive rainfall is expected.\n\n* WHERE...Sainte Genevieve County in southeastern Missouri...\nSaint Francois County in southeastern Missouri...\n\n* WHEN...Until 1000 AM CST.\n\n* IMPACTS...Rises in small streams. Water over roadways.\n\n* ADDITIONAL DETAILS...\n- At 505 AM CST, Doppler radar indicated heavy rain due to\nthunderstorms. Minor flooding is ongoing or expected to begin\nshortly in the advisory area. Between 1 and 2 inches of rain have\nfallen.\n- Additional rainfall amounts up to 1 inch are expected over the\narea. This additional rain will result in minor flooding.\n- Some locations that will experience flooding include...\nFarmington, Bonne Terre, Desloge, Ste. Genevieve, Bismarck,\nLeadwood, Park Hills, Iron Mountain Lake, Bloomsdale, St. Mary,\nWeingarten, Rocky Ridge, Coffman, Knob Lick, Womac, Iron\nMountain, Leadington, French Village, Libertyville and Doe Run.", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nBe especially cautious at night when it is harder to recognize the\ndangers of flooding.\n\nBe aware of your surroundings and do not drive on flooded roads.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLSLSX" + ], + "WMOidentifier": [ + "WGUS83 KLSX 071105" + ], + "NWSheadline": [ + "FLOOD ADVISORY IN EFFECT UNTIL 10 AM CST THIS MORNING" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "VTEC": [ + "/O.NEW.KLSX.FA.Y.0006.260307T1105Z-260307T1600Z/" + ], + "eventEndingTime": [ + "2026-03-07T10:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "NWS" + ], + "NationalWeatherService": [ + "FAY" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/features/flood_warning.json b/spec/fixtures/features/flood_warning.json new file mode 100644 index 0000000..b0edf1d --- /dev/null +++ b/spec/fixtures/features/flood_warning.json @@ -0,0 +1,108 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -92.8, + 38.92 + ], + [ + -92.64, + 38.94 + ], + [ + -92.5, + 38.92 + ], + [ + -92.52, + 38.88 + ], + [ + -92.79, + 38.87 + ], + [ + -92.8, + 38.92 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.32aef7dc2ec79ea474042bd2312a4d46fc46bdee.001.1", + "areaDesc": "Cooper, MO", + "geocode": { + "SAME": [ + "029053" + ], + "UGC": [ + "MOC053" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/MOC053" + ], + "references": [], + "sent": "2026-03-07T08:40:00-05:00", + "effective": "2026-03-07T08:40:00-05:00", + "onset": "2026-03-07T10:40:00-05:00", + "expires": "2026-03-08T08:45:00-05:00", + "ends": "2026-03-08T14:43:00-05:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Likely", + "urgency": "Expected", + "event": "Flood Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Kansas City/Pleasant Hill MO", + "headline": "Flood Warning issued March 7 at 7:40AM CST until March 8 at 2:43PM CDT by NWS Kansas City/Pleasant Hill MO", + "description": "...The National Weather Service in Pleasant Hill MO has issued a\nFlood Warning for the following rivers in Missouri...\n\nPetite Saline Creek near Boonville affecting Cooper County.\n\n* WHAT...Minor flooding is forecast.\n\n* WHERE...Petite Saline Creek near Boonville.\n\n* WHEN...Until early tomorrow afternoon.\n\n* IMPACTS...At 16.0 feet, Low lying woodlands and fields near the\ncreek flood.\nAt 19.5 feet, The creek floods U Highway about 4 miles southeast\nof Boonville.\n\n* ADDITIONAL DETAILS...\n- At 6:30 AM CST Saturday the stage was 14.1 feet.\n- Forecast...The river is expected to rise above flood stage\nlate this morning to a crest of 17.7 feet this evening. It\nwill then fall below flood stage just after midnight tonight.\n- Flood stage is 16.0 feet.\n- http://www.weather.gov/safety/flood", + "instruction": "Turn around, don't drown when encountering flooded roads. Most flood\ndeaths occur in vehicles.\n\nThis product along with additional weather and stream information is\navailable at www.weather.gov/kc/.", + "response": "Avoid", + "parameters": { + "AWIPSidentifier": [ + "FLWEAX" + ], + "WMOidentifier": [ + "WGUS43 KEAX 071340" + ], + "NWSheadline": [ + "FLOOD WARNING IN EFFECT UNTIL EARLY TOMORROW AFTERNOON" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KEAX.FL.W.0003.260307T1540Z-260308T1943Z/" + ], + "eventEndingTime": [ + "2026-03-08T14:43:00-05:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "FLW" + ], + "NationalWeatherService": [ + "FLW" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/features/multipolygon.json b/spec/fixtures/features/multipolygon.json new file mode 100644 index 0000000..72cdd5b --- /dev/null +++ b/spec/fixtures/features/multipolygon.json @@ -0,0 +1,69 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", + "type": "Feature", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -97.56, + 34.57 + ], + [ + -97.38, + 34.77 + ], + [ + -97.17, + 34.75 + ], + [ + -97.56, + 34.57 + ] + ] + ], + [ + [ + [ + -96.0, + 35.0 + ], + [ + -95.8, + 35.2 + ], + [ + -95.6, + 35.1 + ], + [ + -96.0, + 35.0 + ] + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", + "id": "urn:oid:2.49.0.1.840.0.4444", + "areaDesc": "Central Oklahoma", + "geocode": {}, + "sent": "2014-10-01T08:40:00-07:00", + "effective": "2014-10-01T08:40:00-07:00", + "onset": "2014-10-01T08:40:00-07:00", + "expires": "2014-10-03T21:00:00-07:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Extreme", + "certainty": "Likely", + "urgency": "Immediate", + "event": "Tornado Warning", + "headline": "Tornado Warning issued October 01", + "description": "Tornado warning details", + "parameters": {} + } +} \ No newline at end of file diff --git a/spec/fixtures/features/null_geometry.json b/spec/fixtures/features/null_geometry.json new file mode 100644 index 0000000..770c908 --- /dev/null +++ b/spec/fixtures/features/null_geometry.json @@ -0,0 +1,145 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "type": "Feature", + "geometry": null, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.13a53a6360dc28a8bb56ca34f9a4091651ba2c6e.002.1", + "areaDesc": "Clark, AR; Cleburne, AR; Conway, AR; Dallas, AR; Faulkner, AR; Garland, AR; Grant, AR; Hot Spring, AR; Independence, AR; Lonoke, AR; Montgomery, AR; Ouachita, AR; Perry, AR; Pike, AR; Pope, AR; Pulaski, AR; Saline, AR; Searcy, AR; Stone, AR; Van Buren, AR; White, AR; Yell, AR", + "geocode": { + "SAME": [ + "005019", + "005023", + "005029", + "005039", + "005045", + "005051", + "005053", + "005059", + "005063", + "005085", + "005097", + "005103", + "005105", + "005109", + "005115", + "005119", + "005125", + "005129", + "005137", + "005141", + "005145", + "005149" + ], + "UGC": [ + "ARC019", + "ARC023", + "ARC029", + "ARC039", + "ARC045", + "ARC051", + "ARC053", + "ARC059", + "ARC063", + "ARC085", + "ARC097", + "ARC103", + "ARC105", + "ARC109", + "ARC115", + "ARC119", + "ARC125", + "ARC129", + "ARC137", + "ARC141", + "ARC145", + "ARC149" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC019", + "https://api.weather.gov/zones/county/ARC023", + "https://api.weather.gov/zones/county/ARC029", + "https://api.weather.gov/zones/county/ARC039", + "https://api.weather.gov/zones/county/ARC045", + "https://api.weather.gov/zones/county/ARC051", + "https://api.weather.gov/zones/county/ARC053", + "https://api.weather.gov/zones/county/ARC059", + "https://api.weather.gov/zones/county/ARC063", + "https://api.weather.gov/zones/county/ARC085", + "https://api.weather.gov/zones/county/ARC097", + "https://api.weather.gov/zones/county/ARC103", + "https://api.weather.gov/zones/county/ARC105", + "https://api.weather.gov/zones/county/ARC109", + "https://api.weather.gov/zones/county/ARC115", + "https://api.weather.gov/zones/county/ARC119", + "https://api.weather.gov/zones/county/ARC125", + "https://api.weather.gov/zones/county/ARC129", + "https://api.weather.gov/zones/county/ARC137", + "https://api.weather.gov/zones/county/ARC141", + "https://api.weather.gov/zones/county/ARC145", + "https://api.weather.gov/zones/county/ARC149" + ], + "references": [ + { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6d9b39fd6e1ceb202a2a70cd92c68d4d9fb84e21.001.1", + "identifier": "urn:oid:2.49.0.1.840.0.6d9b39fd6e1ceb202a2a70cd92c68d4d9fb84e21.001.1", + "sender": "w-nws.webmaster@noaa.gov", + "sent": "2026-03-07T03:19:00-06:00" + } + ], + "sent": "2026-03-07T06:45:00-06:00", + "effective": "2026-03-07T06:45:00-06:00", + "onset": "2026-03-07T06:45:00-06:00", + "expires": "2026-03-07T08:00:00-06:00", + "ends": "2026-03-07T08:00:00-06:00", + "status": "Actual", + "messageType": "Update", + "category": "Met", + "severity": "Extreme", + "certainty": "Possible", + "urgency": "Future", + "event": "Tornado Watch", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Tornado Watch issued March 7 at 6:45AM CST until March 7 at 8:00AM CST by NWS Little Rock AR", + "description": "TORNADO WATCH 22 REMAINS VALID UNTIL 8 AM CST THIS MORNING FOR\nTHE FOLLOWING AREAS\n\nIN ARKANSAS THIS WATCH INCLUDES 22 COUNTIES\n\nIN CENTRAL ARKANSAS\n\nCONWAY FAULKNER GARLAND\nGRANT LONOKE PERRY\nPOPE PULASKI SALINE\nWHITE YELL\n\nIN NORTH CENTRAL ARKANSAS\n\nCLEBURNE INDEPENDENCE SEARCY\nSTONE VAN BUREN\n\nIN SOUTHWEST ARKANSAS\n\nCLARK DALLAS HOT SPRING\nOUACHITA PIKE\n\nIN WESTERN ARKANSAS\n\nMONTGOMERY\n\nTHIS INCLUDES THE CITIES OF ARKADELPHIA, BATESVILLE, BEEBE,\nBENTON, BRYANT, CABOT, CAMDEN, CLINTON, CONWAY, DANVILLE,\nDARDANELLE, FAIRFIELD BAY, FORDYCE, GLENWOOD, HEBER SPRINGS,\nHOT SPRINGS, LESLIE, LITTLE ROCK, LONOKE, MALVERN, MARSHALL,\nMORRILTON, MOUNT IDA, MOUNTAIN VIEW, MURFREESBORO, NORMAN,\nNORTH LITTLE ROCK, OLA, PERRYVILLE, RUSSELLVILLE, SEARCY,\nAND SHERIDAN.", + "instruction": null, + "response": "Monitor", + "parameters": { + "AWIPSidentifier": [ + "WCNLZK" + ], + "WMOidentifier": [ + "WWUS64 KLZK 071245" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.CON.KLZK.TO.A.0022.000000T0000Z-260307T1400Z/" + ], + "eventEndingTime": [ + "2026-03-07T08:00:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "TOA" + ], + "NationalWeatherService": [ + "TOA" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/features/polygon_no_vtec.json b/spec/fixtures/features/polygon_no_vtec.json new file mode 100644 index 0000000..810719e --- /dev/null +++ b/spec/fixtures/features/polygon_no_vtec.json @@ -0,0 +1,165 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -93.93, + 34.21 + ], + [ + -93.93, + 34.19 + ], + [ + -93.82, + 34.18 + ], + [ + -93.82, + 34.01 + ], + [ + -93.75, + 34.01 + ], + [ + -93.68, + 33.98 + ], + [ + -93.65, + 33.98 + ], + [ + -93.62, + 33.96 + ], + [ + -93.59, + 33.96 + ], + [ + -93.54, + 33.95 + ], + [ + -93.53, + 33.95 + ], + [ + -93.53, + 33.94 + ], + [ + -93.47, + 33.96 + ], + [ + -93.46, + 33.96 + ], + [ + -93.46, + 33.95 + ], + [ + -94, + 33.85 + ], + [ + -94.13, + 33.99 + ], + [ + -93.93, + 34.21 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.116c03c45241f7d902fc876c32d9077690f39444.001.1", + "areaDesc": "Sevier; Howard; Hempstead", + "geocode": { + "SAME": [ + "005133", + "005061", + "005057" + ], + "UGC": [ + "ARZ050", + "ARZ051", + "ARZ060" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/forecast/ARZ050", + "https://api.weather.gov/zones/forecast/ARZ051", + "https://api.weather.gov/zones/forecast/ARZ060" + ], + "references": [], + "sent": "2026-03-07T07:48:00-06:00", + "effective": "2026-03-07T07:48:00-06:00", + "onset": "2026-03-07T07:48:00-06:00", + "expires": "2026-03-07T08:15:00-06:00", + "ends": null, + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Moderate", + "certainty": "Observed", + "urgency": "Expected", + "event": "Special Weather Statement", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Shreveport LA", + "headline": "Special Weather Statement issued March 7 at 7:48AM CST by NWS Shreveport LA", + "description": "At 748 AM CST, Doppler radar was tracking a strong thunderstorm 8\nmiles southwest of Center Point, or 7 miles northwest of Mineral\nSprings, moving northeast at 40 mph.\n\nHAZARD...Wind gusts up to 40 mph and half inch size hail.\n\nSOURCE...Radar indicated.\n\nIMPACT...Gusty winds could knock down tree limbs and blow around\nunsecured objects. Minor damage to outdoor objects is\npossible.\n\nLocations impacted include...\nNashville, Mineral Springs, Dierks, Corinth, Center Point,\nMcCaskill, Muddy Fork and Silver Ridge.", + "instruction": "Monitor the weather situation closely and be alert for threatening\nweather conditions.", + "response": "Execute", + "parameters": { + "AWIPSidentifier": [ + "SPSSHV" + ], + "WMOidentifier": [ + "WWUS84 KSHV 071348" + ], + "NWSheadline": [ + "A STRONG THUNDERSTORM WILL IMPACT NORTHEASTERN HEMPSTEAD... SOUTHEASTERN HOWARD AND EAST CENTRAL SEVIER COUNTIES UNTIL 815 AM CST" + ], + "eventMotionDescription": [ + "2026-03-07T13:48:00-00:00...storm...233DEG...33KT...33.95,-94.02" + ], + "maxWindGust": [ + "40 MPH" + ], + "maxHailSize": [ + "0.50" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SPS" + ], + "NationalWeatherService": [ + "SPS" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/features/polygon_with_vtec.json b/spec/fixtures/features/polygon_with_vtec.json new file mode 100644 index 0000000..56ec44a --- /dev/null +++ b/spec/fixtures/features/polygon_with_vtec.json @@ -0,0 +1,128 @@ +{ + "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -91.75, + 35.85 + ], + [ + -91.82, + 35.99 + ], + [ + -91.25, + 36.29 + ], + [ + -91.03, + 36.05 + ], + [ + -91.75, + 35.85 + ] + ] + ] + }, + "properties": { + "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "@type": "wx:Alert", + "id": "urn:oid:2.49.0.1.840.0.6fd19dc0ecfb760f9e79d1311c993a4fc1760ec4.001.1", + "areaDesc": "Independence, AR; Izard, AR; Lawrence, AR; Randolph, AR; Sharp, AR", + "geocode": { + "SAME": [ + "005063", + "005065", + "005075", + "005121", + "005135" + ], + "UGC": [ + "ARC063", + "ARC065", + "ARC075", + "ARC121", + "ARC135" + ] + }, + "affectedZones": [ + "https://api.weather.gov/zones/county/ARC063", + "https://api.weather.gov/zones/county/ARC065", + "https://api.weather.gov/zones/county/ARC075", + "https://api.weather.gov/zones/county/ARC121", + "https://api.weather.gov/zones/county/ARC135" + ], + "references": [], + "sent": "2026-03-07T07:28:00-06:00", + "effective": "2026-03-07T07:28:00-06:00", + "onset": "2026-03-07T07:28:00-06:00", + "expires": "2026-03-07T08:15:00-06:00", + "ends": "2026-03-07T08:15:00-06:00", + "status": "Actual", + "messageType": "Alert", + "category": "Met", + "severity": "Severe", + "certainty": "Observed", + "urgency": "Immediate", + "event": "Severe Thunderstorm Warning", + "sender": "w-nws.webmaster@noaa.gov", + "senderName": "NWS Little Rock AR", + "headline": "Severe Thunderstorm Warning issued March 7 at 7:28AM CST until March 7 at 8:15AM CST by NWS Little Rock AR", + "description": "SVRLZK\n\nThe National Weather Service in Little Rock has issued a\n\n* Severe Thunderstorm Warning for...\nNorthwestern Independence County in north central Arkansas...\nSouth central Randolph County in eastern Arkansas...\nSoutheastern Izard County in north central Arkansas...\nNorthwestern Lawrence County in eastern Arkansas...\nSouthern Sharp County in north central Arkansas...\n\n* Until 815 AM CST.\n\n* At 728 AM CST, a severe thunderstorm was located over Sidney, or 12\nmiles southeast of Melbourne, moving east at 50 mph.\n\nHAZARD...60 mph wind gusts.\n\nSOURCE...Radar indicated.\n\nIMPACT...Expect damage to roofs, siding, and trees.\n\n* Locations impacted include...\nBlack Rock... Lake Charles State Park...\nCave City... Imboden...\nRavenden... Cushman...\nPortia... Mount Pleasant...\nStrawberry... Lynn...\nSidney... Annieville...\nStella... Evening Shade...\nSmithville... Powhatan...\nAetna... Calamine...\nNelsonville... Sitka...", + "instruction": "A Tornado Watch remains in effect until 800 AM CST for north central\nArkansas.\n\nFor your protection move to an interior room on the lowest floor of a\nbuilding.\n\nA Tornado Watch remains in effect until 800 AM CST for north central\nArkansas.", + "response": "Shelter", + "parameters": { + "AWIPSidentifier": [ + "SVRLZK" + ], + "WMOidentifier": [ + "WUUS54 KLZK 071328" + ], + "eventMotionDescription": [ + "2026-03-07T13:28:00-00:00...storm...248DEG...42KT...35.97,-91.69" + ], + "windThreat": [ + "RADAR INDICATED" + ], + "maxWindGust": [ + "60 MPH" + ], + "hailThreat": [ + "RADAR INDICATED" + ], + "maxHailSize": [ + "Up to .75" + ], + "BLOCKCHANNEL": [ + "EAS", + "NWEM", + "CMAS" + ], + "EAS-ORG": [ + "WXR" + ], + "VTEC": [ + "/O.NEW.KLZK.SV.W.0013.260307T1328Z-260307T1415Z/" + ], + "eventEndingTime": [ + "2026-03-07T08:15:00-06:00" + ] + }, + "scope": "Public", + "code": "IPAWSv1.0", + "language": "en-US", + "web": "http://www.weather.gov", + "eventCode": { + "SAME": [ + "SVR" + ], + "NationalWeatherService": [ + "SVW" + ] + } + } +} \ No newline at end of file diff --git a/spec/fixtures/multipolygon_alert.json b/spec/fixtures/multipolygon_alert.json deleted file mode 100644 index 74be115..0000000 --- a/spec/fixtures/multipolygon_alert.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", - "type": "Feature", - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - [ - [-97.56, 34.57], - [-97.38, 34.77], - [-97.17, 34.75], - [-97.56, 34.57] - ] - ], - [ - [ - [-96.0, 35.0], - [-95.8, 35.2], - [-95.6, 35.1], - [-96.0, 35.0] - ] - ] - ] - }, - "properties": { - "@id": "https://api.weather.gov/alerts/urn:oid:2.49.0.1.840.0.4444", - "id": "urn:oid:2.49.0.1.840.0.4444", - "areaDesc": "Central Oklahoma", - "geocode": {}, - "sent": "2014-10-01T08:40:00-07:00", - "effective": "2014-10-01T08:40:00-07:00", - "onset": "2014-10-01T08:40:00-07:00", - "expires": "2014-10-03T21:00:00-07:00", - "status": "Actual", - "messageType": "Alert", - "category": "Met", - "severity": "Extreme", - "certainty": "Likely", - "urgency": "Immediate", - "event": "Tornado Warning", - "headline": "Tornado Warning issued October 01", - "description": "Tornado warning details", - "parameters": {} - } - } - ] -} From fb534cd344044f66db310025381767954b220f85 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 00:08:31 -0500 Subject: [PATCH 14/17] Update README and CHANGELOG for 1.0.0 Remove defunct badges, add GitHub Actions badge, update usage examples for new API, document zero runtime dependencies. --- CHANGELOG.md | 6 +++++- README.md | 29 +++++++++++------------------ 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff51635..3aa6a62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +1.0.0 (03/07/2026) - Major rewrite: migrate from defunct `alerts.weather.gov` XML feed to `api.weather.gov/alerts` JSON API. Drop all runtime dependencies (`httpclient`, `nokogiri`) in favor of Ruby stdlib (`net/http`, `json`). Require Ruby >= 3.1. Add `area` option for state-based filtering. Replace Travis CI with GitHub Actions. Add RuboCop. **Breaking:** remove `url` option (use `area` instead), remove `Polygon#image_url`, remove `strict` option. + +*** + 0.4.0 (07/26/2016) - Merged pull request #2 from [schrockwell](https://github.com/schrockwell), which adds `to_wkt` to `Polygon` which formats the polygon points as Well-Known Text (WKT). Removed `centroid` method, use new `to_wkt` method with an external geospatial library instead. *** @@ -43,7 +47,7 @@ *** 0.2.0 (10/02/2014) - Introduced Polygon type. - + *** 0.1.1 (10/01/2014) - Refactored and simplified alert processing. diff --git a/README.md b/README.md index 9da3e38..b87346a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ [![Gem Version](https://badge.fury.io/rb/gull.svg)](http://badge.fury.io/rb/gull) -[![Build Status](https://travis-ci.org/sethdeckard/gull.svg?branch=master)](https://travis-ci.org/sethdeckard/gull) -[![Coverage Status](https://coveralls.io/repos/sethdeckard/gull/badge.svg?branch=master)](https://coveralls.io/r/sethdeckard/gull) -[![Code Climate](https://codeclimate.com/github/sethdeckard/gull/badges/gpa.svg)](https://codeclimate.com/github/sethdeckard/gull) -[![Dependency Status](https://gemnasium.com/sethdeckard/gull.svg)](https://gemnasium.com/sethdeckard/gull) -[![security](https://hakiri.io/github/sethdeckard/gull/master.svg)](https://hakiri.io/github/sethdeckard/gull/master) +[![CI](https://github.com/sethdeckard/gull/actions/workflows/ci.yml/badge.svg)](https://github.com/sethdeckard/gull/actions/workflows/ci.yml) # Gull -Ruby client for parsing NOAA/NWS alerts, warnings, and watches. The name comes from the type of bird featured on the NOAA logo. Please read the Notes/Caveats section for limitations. +Ruby client for parsing NOAA/NWS alerts, warnings, and watches. The name comes from the type of bird featured on the NOAA logo. Zero runtime dependencies -- uses only Ruby stdlib (`net/http`, `json`). ## Installation @@ -49,11 +45,10 @@ alert.certainty alert.vtec ``` -To get alerts for a single state, territory, or marine zone just pass an optional URL +To get alerts for a single state or territory, pass the area option: ```ruby -oklahoma_url = 'http://alerts.weather.gov/cap/ok.php?x=1' -alerts = Gull::Alert.fetch(url: oklahoma_url) +alerts = Gull::Alert.fetch(area: 'OK') ``` You can also generate a map (a really long URL pointing to a map) of the polygon if alert has one (requires Google Static Maps API Key) @@ -61,7 +56,7 @@ You can also generate a map (a really long URL pointing to a map) of the polygon ```ruby alert.polygon.image_url 'YOUR_GOOGLE_API_KEY' -=> "http://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&path=color:0xff0000|weight:3|fillcolor:0xff000060|38.73,-94.22|38.75,-94.16|38.57,-93.94|38.4,-93.84|38.4,-93.91|38.73,-94.22&key=YOUR_GOOGLE_API_KEY" +=> "https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&path=color:0xff0000|weight:3|fillcolor:0xff000060|38.73,-94.22|38.75,-94.16|38.57,-93.94|38.4,-93.84|38.4,-93.91|38.73,-94.22&key=YOUR_GOOGLE_API_KEY" ``` Options can be passed for map to override defaults @@ -73,17 +68,15 @@ alert.polygon.image_url 'YOUR_GOOGLE_API_KEY', options ``` ##Notes, Caveats -This library provides a simplified/flattened model of the [Common Alerting Protocol](http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html) based only on the elements NWS utilizes in their [public Atom feeds](http://alerts.weather.gov/). If you need a complete CAP parser I suggest looking at [RCAP](https://github.com/farrel/RCAP). +This library fetches active alerts from the [NWS API](https://api.weather.gov) (`api.weather.gov/alerts/active`), which returns GeoJSON. No authentication is required but the API does require a `User-Agent` header (set automatically by the gem). -The NWS will often cancel or update alerts before their expiration time. The public Atom feeds only provide current active alerts and do not include these separate update and cancellation CAP messages. - -The public Atom feeds have not always been reliable in terms of uptime and are often delayed by 2-3 minutes. If you are considering using this (or another gem/library that accesses the public Atom feeds) for mission critical purposes then you should explore other options. +The NWS will often cancel or update alerts before their expiration time. The API only returns currently active alerts. ### Urgency -| Symbol | Definition +| Symbol | Definition | :------------- |:------------- -| :immediate | Responsive action should betaken immediately +| :immediate | Responsive action should be taken immediately | :expected | Responsive action should be taken soon (within next hour) | :future | Responsive action should be taken in the near future | :past | Responsive action is no longer required @@ -91,7 +84,7 @@ The public Atom feeds have not always been reliable in terms of uptime and are o ### Severity -| Symbol | Definition +| Symbol | Definition | :------------- |:------------- | :extreme | Extraordinary threat to life or property | :severe | Significant threat to life or property @@ -101,7 +94,7 @@ The public Atom feeds have not always been reliable in terms of uptime and are o ### Certainty -| Symbol | Definition +| Symbol | Definition | :------------- |:------------- | :very_likely | Highly likely (p > ~ 85%) or certain | :likely | Likely (p > ~50%) From 9b8533d88ff3fa4e9c57003f9bc9bb838b56dd41 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 09:11:47 -0500 Subject: [PATCH 15/17] Remove Polygon#image_url Google Static Maps requires billing and is unrelated to NWS alerts. Callers can use coordinates or to_wkt with any mapping library. --- README.md | 16 ---------------- lib/gull/polygon.rb | 23 ----------------------- spec/polygon_spec.rb | 24 +----------------------- 3 files changed, 1 insertion(+), 62 deletions(-) diff --git a/README.md b/README.md index b87346a..7c85de2 100644 --- a/README.md +++ b/README.md @@ -51,22 +51,6 @@ To get alerts for a single state or territory, pass the area option: alerts = Gull::Alert.fetch(area: 'OK') ``` -You can also generate a map (a really long URL pointing to a map) of the polygon if alert has one (requires Google Static Maps API Key) - -```ruby -alert.polygon.image_url 'YOUR_GOOGLE_API_KEY' - -=> "https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&path=color:0xff0000|weight:3|fillcolor:0xff000060|38.73,-94.22|38.75,-94.16|38.57,-93.94|38.4,-93.84|38.4,-93.91|38.73,-94.22&key=YOUR_GOOGLE_API_KEY" -``` - -Options can be passed for map to override defaults - -```ruby -options = { width: 600, height: 300, color: '0xfbf000', weight: 4, - fillcolor: '0xfbf00070', maptype: 'hybrid' } -alert.polygon.image_url 'YOUR_GOOGLE_API_KEY', options -``` - ##Notes, Caveats This library fetches active alerts from the [NWS API](https://api.weather.gov) (`api.weather.gov/alerts/active`), which returns GeoJSON. No authentication is required but the API does require a `User-Agent` header (set automatically by the gem). diff --git a/lib/gull/polygon.rb b/lib/gull/polygon.rb index 585c516..a9c0f31 100644 --- a/lib/gull/polygon.rb +++ b/lib/gull/polygon.rb @@ -8,23 +8,6 @@ def initialize(coords) self.coordinates = coords.map { |point| [point[1], point[0]] } end - def image_url(api_key, options = {}) - options = { - width: 640, - height: 640, - color: '0xff0000', - weight: 3, - fillcolor: '0xff000060', - maptype: 'roadmap' - }.merge(options) - - url_base = 'https://maps.googleapis.com/maps/api/staticmap' - "#{url_base}?size=#{options[:width]}x#{options[:height]}" \ - "&maptype=#{options[:maptype]}&path=color:#{options[:color]}" \ - "|weight:#{options[:weight]}|fillcolor:#{options[:fillcolor]}" \ - "|#{coordinates_piped}&key=#{api_key}" - end - def to_s coordinates.map { |pair| pair.join(',') }.join(' ') end @@ -34,11 +17,5 @@ def to_wkt .join(', ') "POLYGON((#{pairs}))" end - - private - - def coordinates_piped - coordinates.map { |pair| pair.join(',') }.join('|') - end end end diff --git a/spec/polygon_spec.rb b/spec/polygon_spec.rb index 929ee9e..83c5468 100644 --- a/spec/polygon_spec.rb +++ b/spec/polygon_spec.rb @@ -3,29 +3,7 @@ require 'spec_helper' describe Gull::Polygon do - it 'should return static map image url' do - coords = [[-97.56, 34.57], [-97.38, 34.77], [-97.17, 34.75]] - polygon = Gull::Polygon.new coords - - api_key = 'testkey' - options = { width: 600, height: 300, color: '0xfbf000', weight: 4, - fillcolor: '0xfbf00070', maptype: 'hybrid' } - url = polygon.image_url api_key, options - expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ - 'size=600x300&maptype=hybrid&path=color:0xfbf000' \ - '|weight:4|fillcolor:0xfbf00070|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ - '&key=testkey' - expect(url).to eq expected_url - - url = polygon.image_url api_key - expected_url = 'https://maps.googleapis.com/maps/api/staticmap?' \ - 'size=640x640&maptype=roadmap&path=color:0xff0000' \ - '|weight:3|fillcolor:0xff000060|34.57,-97.56|34.77,-97.38|34.75,-97.17' \ - '&key=testkey' - expect(url).to eq expected_url - end - - it 'should return original string representation' do + it 'should return string representation' do coords = [[-97.56, 34.57], [-97.38, 34.77], [-97.17, 34.75], [-97.11, 34.64], [-97.14, 34.64], [-97.14, 34.62], [-97.2, 34.62], [-97.19, 34.6], [-97.17, 34.59], From e54f553a3e2cfb79143dd2620aa00b7751cd2231 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 09:21:54 -0500 Subject: [PATCH 16/17] Update license year and gemspec description --- LICENSE.txt | 2 +- gull.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index 3776d94..b513206 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2014 Seth Deckard +Copyright (c) 2014-2026 Seth Deckard MIT License diff --git a/gull.gemspec b/gull.gemspec index f3702d0..e740c94 100644 --- a/gull.gemspec +++ b/gull.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |spec| spec.authors = ['Seth Deckard'] spec.email = ['seth@deckard.me'] spec.summary = 'Client for parsing NOAA/NWS alerts, warnings, and watches.' - spec.description = 'Client for parsing NOAA/NWS alerts, warnings, and watches.' + spec.description = 'Fetches and parses NOAA/NWS alerts, warnings, and watches from api.weather.gov. Zero runtime dependencies.' spec.homepage = 'https://github.com/sethdeckard/gull' spec.license = 'MIT' spec.required_ruby_version = '>= 3.1' From 148565fb838b90e1f4cca6747fbc8161442ba247 Mon Sep 17 00:00:00 2001 From: Seth Deckard Date: Sat, 7 Mar 2026 00:09:14 -0500 Subject: [PATCH 17/17] Bump version to 1.0.0 --- lib/gull/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gull/version.rb b/lib/gull/version.rb index c6c209c..45388c4 100644 --- a/lib/gull/version.rb +++ b/lib/gull/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Gull - VERSION = '0.4.0' + VERSION = '1.0.0' end