Site Map - skip to main content

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes every weekday Monday through Friday.
This page was generated by The HPR Robot at


hpr3472 :: consuming an AQI API

just because the sky is clear, doesn't mean the air is safe to breathe

<< First, < Previous, , Latest >>

Hosted by Jezra on Tuesday, 2021-11-23 is flagged as Clean and is released under a CC-BY-SA license.
ruby, api, programming. 2.
The show is available on the Internet Archive at: https://archive.org/details/hpr3472

Listen in ogg, spx, or mp3 format. Play now:

Duration: 00:06:26

Programming 101.

A series focusing on concepts and the basics of programming

AQI

Air Quality Index - measures particles in the air

https://en.wikipedia.org/wiki/Particulates#Wildfire_smoke_risk

Getting AQI data

Determining air quality in my area is as simple as visiting https://www.airnow.gov and entering my zip code. Although my zip code covers 139.56 square miles, the result is accurate enough for my needs. When my zip code was submitted, the web page did not refresh. This means that the client interface made an API call to the backend server.

It sure would be nice if the AQI status was emailed to my phone every hour, if the AQI was above a certain threshold.

In order to get the data from the API, it is necessary to emulate the request made by the client to the API. This can be accomplished using Firefox.

  • open Firefox
  • go to https://www.airnow.gov
  • open the Firefox developer tools, either through the menu or with CTRL+SHIFT+i
  • in the dev tools, select the Network tab
  • enter the zip code in the form and submit
  • watch the Network tab for a POST request to https://airnowgovapi.com/reportingarea/get
  • click on the request in the network tab

Another set of tabs are now available to display various bits of information regarding the request. From this data, it is possible to recreate the query. However, I took an even easier route, and right-clicked on the query in the Network tab, and selected Copy > Copy as cURL to get the request as a curl command complete with all necessary arguments prefilled. Since I didn't want to write my entire AQI fetching script in bash, I copied the curl command into a text file and ported the request to Ruby.

The Finished Script

#!/usr/bin/env ruby
require 'net/http'
require 'uri'
require 'json'

uri ="https://airnowgovapi.com/reportingarea/get"
parsed_uri = URI.parse(uri)
payload={latitude:39.88,longitude:-120.76,stateCode:'CA',maxDistance:50}
response = Net::HTTP.post_form(parsed_uri, payload)
data = JSON.parse(response.body)[0]
aqi=data["aqi"].to_i
category=data['category']
parameter=data['parameter']

output= "#{parameter}: #{aqi} - #{category}"
puts output


/opt/textjezra "#{output}"` if aqi > 70

Comments

Subscribe to the comments RSS feed.

Comment #1 posted on 2021-11-27 11:59:41 by Kevin O'Brien

I loved the show

I think this is a perfect example of hacking. Fantastic!

Comment #2 posted on 2022-02-17 21:23:34 by Stache_AF

Thank you

Your podcast gave me the idea to do the same for my state's daily COVID updates. I was able to find the API info and break it out so I could extract my state's, county's, and zip code's respective numbers so I don't have to click through several interactive maps.

Leave Comment

Note to Verbose Commenters
If you can't fit everything you want to say in the comment below then you really should record a response show instead.

Note to Spammers
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to record a show about yourself, or your industry, or any other topic we may find interesting. We also check shows for spam :).

Provide feedback
Your Name/Handle:
Title:
Comment:
Anti Spam Question: What does the letter P in HPR stand for?
Are you a spammer?
Who is the host of this show?
What does HPR mean to you?