diff src/gf/gf.go @ 35:a4a54931b6fa

add gf.go.
author pyon@macmini
date Wed, 20 Nov 2019 06:19:13 +0900
parents
children a2e33e922a54
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gf/gf.go	Wed Nov 20 06:19:13 2019 +0900
@@ -0,0 +1,130 @@
+/*
+Last Change: 2019-11-20 Wed 05:44:47.
+
+ gf.go: Get Files (ver.0.3)
+
+ ./gf.json: server & file list
+ e.g.
+ {
+   "Server": {
+     "Address": "sdm.sakura.ne.jp",
+     "Port": "80"
+   },
+   "Files": [
+     "mahjong.html",
+     "gammon",
+     "gammon/backgammon.html"
+   ]
+ }
+
+ TODO:
+  * goroutine
+  * make dir option [-r]
+  * json file option [-j]
+*/
+package main
+
+import (
+    "encoding/json"
+    "fmt"
+    "flag"
+    "io/ioutil"
+    "log"
+    "os"
+    "path"
+    "net/http"
+)
+
+const version = "0.3"
+const defaultjson = "gf.json"
+
+type SV struct {
+    Address string
+    Port string
+}
+
+func (sv SV) String() string {
+    return sv.Address + ":" + sv.Port
+}
+
+type GF struct {
+    Server SV
+    Files []string
+}
+
+var (
+    ver bool
+    quiet bool
+    jsonfile string
+)
+
+func init() {
+    flag.BoolVar(&ver, "v", false, "version.")
+    flag.BoolVar(&quiet, "s", false, "silence.")
+    flag.StringVar(&jsonfile, "j", defaultjson, "specify json file.")
+}
+
+func main() {
+    flag.Parse()
+
+    if ver {
+        fmt.Println("gf", version)
+        os.Exit(0)
+    }
+
+    content, err := ioutil.ReadFile(jsonfile)
+    if err != nil {
+        log.Fatal(err)
+    }
+
+    var gf GF
+
+    err = json.Unmarshal(content, &gf)
+    if err != nil {
+        log.Fatal(err)
+    }
+    n := len(gf.Files)
+    if n > 1 {
+        print_msg(fmt.Sprintf("%d files downloading\n", n), quiet)
+    }
+
+    for _, f := range gf.Files {
+        print_msg(" getting " + f + "...", quiet)
+        status, err := http_get(gf.Server.String(), f)
+        if err != nil {
+            print_msg(fmt.Sprintf(" [ERROR] %s\n", err), quiet)
+        } else {
+            print_msg(" [" + status + "]\n", quiet)
+        }
+    }
+}
+
+func http_get(server, file string) (string, error) {
+    url := "http://" + server + "/" + file
+    res, err := http.Get(url)
+    if err != nil {
+        return "", err
+    }
+
+    content, err := ioutil.ReadAll(res.Body)
+    res.Body.Close()
+    if err != nil {
+        return "", err
+    }
+    if res.StatusCode != http.StatusOK {
+        return res.Status, nil
+    }
+
+    err = ioutil.WriteFile(path.Base(file), content, 0644)
+    if err != nil {
+        return "", err
+    }
+    return res.Status, nil
+}
+
+func print_msg(msg string, q bool) {
+    if !q {
+        fmt.Print(msg)
+    }
+}
+