|
@@ -0,0 +1,91 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "image/gif"
|
|
|
+ "io"
|
|
|
+ "net/http"
|
|
|
+ "os"
|
|
|
+)
|
|
|
+
|
|
|
+func GrabPascoGif() error {
|
|
|
+ resp, err := http.Get("https://cdn.tegna-media.com/wtsp/weather/radar/880x495/pasco30.gif")
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("http.Get('%s') => %v", "https://cdn.tegna-media.com/wtsp/weather/radar/880x495/pasco30.gif", err)
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ file, err := os.Create("pasco.gif")
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("os.Create('pasco.gif') => %v", err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ _, err = io.Copy(file, resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("io.Copy => %v", err)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func GrabCentralFloridaGif() error {
|
|
|
+ resp, err := http.Get("https://cdn.tegna-media.com/wtsp/weather/radar/880x495/central_florida.gif")
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("http.Get('%s') => %v", "https://cdn.tegna-media.com/wtsp/weather/radar/880x495/central_florida.gif", err)
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ file, err := os.Create("central_florida.gif")
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("os.Create('central_florida.gif') => %v", err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ _, err = io.Copy(file, resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("io.Copy => %v", err)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func DecodeGif(filename string) (*gif.GIF, error) {
|
|
|
+ file, err := os.Open(filename)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("os.Open('%s') => %v", filename, err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ g, err := gif.DecodeAll(file)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("gif.DecodeAll => %v", err)
|
|
|
+ }
|
|
|
+ return g, nil
|
|
|
+}
|
|
|
+
|
|
|
+func EncodeGif(filename string, g *gif.GIF, separate ...bool) error {
|
|
|
+ sep := false
|
|
|
+ if len(separate) != 0 {
|
|
|
+ sep = separate[0]
|
|
|
+ }
|
|
|
+ if !sep {
|
|
|
+ file, err := os.Create(filename + ".gif")
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("os.Create('%s') => %v", filename, err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ err = gif.EncodeAll(file, g)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("gif.EncodeAll => %v", err)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ for idx, frame := range g.Image {
|
|
|
+ file, err := os.Create(fmt.Sprintf("%s-%d.png", filename, idx))
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("os.Create('%s-%d.png') => %v", filename, idx, err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ err = gif.Encode(file, frame, &gif.Options{
|
|
|
+ NumColors: 256,
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("gif.Encode(%d) => %v", idx, err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|