Add -i flag
This commit is contained in:
parent
b23007a81a
commit
e3d9ff941f
10
README.md
10
README.md
@ -47,4 +47,12 @@ Units in TAF reports are inconsistent between different countries. `tafparser` c
|
|||||||
tafparser -s m/s -d m
|
tafparser -s m/s -d m
|
||||||
```
|
```
|
||||||
|
|
||||||
This tells `tafparser` to convert all speed units to meters per second and distance units to meters.
|
This tells `tafparser` to convert all speed units to meters per second and distance units to meters.
|
||||||
|
|
||||||
|
`tafparser` can also fetch TAF reports for you using the [aviationweather.gov](https://aviationweather.gov) site. Use the `-i <identifier>` flag to tell it to do that, like so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tafparser -i EGLL
|
||||||
|
```
|
||||||
|
|
||||||
|
That should automatically fetch the report for London Heathrow and parse it.
|
@ -2,7 +2,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/alecthomas/repr"
|
"github.com/alecthomas/repr"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
@ -21,6 +24,7 @@ func main() {
|
|||||||
printGo := pflag.BoolP("print-go", "G", false, "Print Go code instead of JSON")
|
printGo := pflag.BoolP("print-go", "G", false, "Print Go code instead of JSON")
|
||||||
convertDist := pflag.StringP("convert-distance", "d", "", "Convert all the distances to the given unit. (valid units: mi, m, km)")
|
convertDist := pflag.StringP("convert-distance", "d", "", "Convert all the distances to the given unit. (valid units: mi, m, km)")
|
||||||
convertSpd := pflag.StringP("convert-speed", "s", "", "Convert all the speeds to the given unit. (valid units: m/s, kph, kts, mph)")
|
convertSpd := pflag.StringP("convert-speed", "s", "", "Convert all the speeds to the given unit. (valid units: m/s, kph, kts, mph)")
|
||||||
|
identifier := pflag.StringP("identifier", "i", "", "Automatically fetch the TAF report for the specified ICAO identifier")
|
||||||
pflag.Parse()
|
pflag.Parse()
|
||||||
|
|
||||||
var opts taf.Options
|
var opts taf.Options
|
||||||
@ -41,18 +45,34 @@ func main() {
|
|||||||
opts.SpeedUnit = s
|
opts.SpeedUnit = s
|
||||||
}
|
}
|
||||||
|
|
||||||
var fl *os.File
|
var r io.Reader
|
||||||
var err error
|
var err error
|
||||||
if pflag.NArg() > 0 {
|
if pflag.NArg() > 0 {
|
||||||
fl, err = os.Open(pflag.Arg(0))
|
fl, err := os.Open(pflag.Arg(0))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error opening file").Err(err).Send()
|
log.Fatal("Error opening file").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
defer fl.Close()
|
||||||
|
r = fl
|
||||||
|
} else if *identifier != "" {
|
||||||
|
// Identifiers must be uppercase
|
||||||
|
*identifier = strings.ToUpper(*identifier)
|
||||||
|
// Get the TAF report from aviationweather.gov's beta endpoint
|
||||||
|
res, err := http.Get("https://beta.aviationweather.gov/cgi-bin/data/taf.php?ids=" + *identifier)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Error getting TAF report").Err(err).Send()
|
||||||
|
}
|
||||||
|
// The backend doesn't return an error for non-existent reports, so check the content length instead
|
||||||
|
if res.ContentLength == 0 {
|
||||||
|
log.Fatal("Could not find a TAF report for the specified airport").Str("id", *identifier).Send()
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
r = res.Body
|
||||||
} else {
|
} else {
|
||||||
fl = os.Stdin
|
r = os.Stdin
|
||||||
}
|
}
|
||||||
|
|
||||||
fc, err := taf.DecodeWithOptions(fl, opts)
|
fc, err := taf.DecodeWithOptions(r, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error parsing TAF data").Err(err).Send()
|
log.Fatal("Error parsing TAF data").Err(err).Send()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user