Mercurial > mercurial > hgweb_golang.cgi
view 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 source
/* 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) } }