The ultimate weather apps
------------------------------------------------------------------
Aug. 31, 2024 (Updated Oct. 9, 2024)

One of the most fun aspects of being a Linux user is all the cool
tricks one can play in the shell (or, command-line interface). Once
you get a hang of it, it becomes your second nature like learning a
second language. And it's fast! No bloated GUI or slow internet
connection to worry about.

# How to get weather using a CLI

Your Linux installation (as well as other UNIX-like systems such as
FreeBSD and even MacOS) comes with a terminal emulator. If you have
a Chromebook, you will need to activate the "Linux development
environment" in the settings first, which will automatically
install a Debian 12 virtual machine.

A terminal emulator should look like a blank window with a tilde
(~) or a dollar sign ($) and a blinking cursor staring at you. If
you see a crosshatch (#) instead of a ~ or $, you are inside a
"root" shell, which is basically a "God mode." This should not be
happening.

Now here's where the fun begins.

## Method 1 : weather

The "weather" command displays the current weather observation of a
weather station (typically an airport). To use this, simply type
"weather -f" and a four-letter (ICAO) airport code.

For example, Portland, Oregon would be:

```
weather -f kpdx
```

Other cities in the Portland-Vancouver-Salem region:

Vancouver, WA: kvuo
Kelso/Longview, WA: kkls
Troutdale/Fairview/Gresham: kttd
Hillsboro: khio
Scappoose/Warren/Saint Helens: kspb
Astoria/Warrenton: kast
Tillamook: ktmk
McMinnville: kmmv
Aurora/Wilsonville/Canby: kuao
Salem/Keizer: ksle
Corvallis: kcvo
Cascade Locks: kczk
The Dalles: kdls

=> https://airportcodes.aero/search Search for other locations

This will pull the latest data from the National Weather Service
(for U.S. locations), the Environment and Climate Change Canada
(for Canadian locations), or other national counterparts.

Unfortunately, since March of this year when NWS reorganized its
forecast zones, weather forecasts are no longer available using
this method (other countries did not provide forecasts even before
then).

## Method 2: wttr.in

This is actually a web-based service but since everything is
text-based, you can display weather (current conditions and a 3-day
forecast) in a terminal:

Option A: use curl

```
curl wttr.in/kuao
```

Any ICAO code works here as well.

```
curl wttr.in/yyj
```

A three-letter IATA code also is acceptable, like YYJ for Victoria,
BC.

```
curl wttr.in/~tualatin
```

Also you can use most place names followed by a tilde (~).

Option B: use lynx

Lynx is a text-based web browser.

```
lynx https://wttr.in/ksle
```

## Method 3: gopher (U.S. only)

Gopher is another text-based content distribution system, predating
the invention of the World Wide Web.

```
gopher gopher://gopher.floodgap.com:70/7/groundhog/us/zipcode
```
This will open a prompt asking for a U.S. ZIP code. It will then
display a weather forecast for that particular city. Alternatively,
you can use Lynx to display Gopher content:

```
lynx gopher://gopher.floodgap.com:70/7/groundhog/us/zipcode
```

To display the latest National Weather Service forecast for your
forecast zone,

```
gopher gopher://gopher.floodgap.com:70/1/groundhog/us/forecast
```

or

```
lynx gopher://gopher.floodgap.com:70/1/groundhog/us/forecast
```

## If they do not work

It is possible that your Linux distribution did not ship with these
software packages.

```
sudo apt update && sudo apt install curl weather-util gopher
lynx-cur
```

This should install all the packages you need and their
dependencies, if any.

## Method 4: metar

This displays METAR data, including current temperature, humidity,
wind, and clouds.

Install "metar" from repo (sudo apt install metar).

Usage (e.g., Salem, Oregon ICAO code KSLE):
```
metar -d KSLE
```

## Method 5: ansiweather

This displays a local weather forecast.

Install "ansiweather" from repo (sudo apt install ansiweather).

Usage (e.g., Tualatin, Oregon):

```
ansiweather -l Tualatin,US -f 3 -u imperial
```

"-f 3" means a 3-day forecast, "-u metric" will show Celsius
instead of Fahrenheit. If a city name has a space, enter like this
(back slash before a space, or it will break):

```
ansiweather -l Oregon\ City,US -f 3 -u imperial
```