Mercurial > mercurial > hgweb_golang.cgi
view src/kaigo/horori/searcher/server/server_backup.go @ 65:0369656be06c default tip
many changes.
author | pyon@macmini |
---|---|
date | Fri, 20 May 2022 06:30:34 +0900 |
parents | |
children |
line wrap: on
line source
/* Last Change: 2022-05-17 Tue 22:56:41. */ package main import ( "encoding/csv" "fmt" "io" "log" "net/http" "os" "path" "path/filepath" "strings" ) var ( server string hhsdb string indexdb string imagedir string lastymd string ) func init() { hhsdb = "hhsdb.csv" indexdb = "index.csv" imagedir = "images" lastymd = "20000101" } func main() { if len(os.Args) != 2 { fmt.Fprintln(os.Stderr, "[usage] > server_backup 192.168.0.1:8080") os.Exit(1) } dirs, err := os.ReadDir(imagedir) if err != nil { log.Fatal(err) } for _, dir := range dirs { if strings.Compare(dir.Name(), lastymd) > 0 { lastymd = dir.Name() } } fmt.Println("last date :", lastymd) server = "http://" + os.Args[1] + "/" // Get /ha/ -> hhsdb.csv os.Rename(hhsdb, hhsdb + ".bak") if err := http_get("/ha/", hhsdb); err != nil { os.Rename(hhsdb + ".bak", hhsdb) log.Fatal(err) } fmt.Println("get hhsdb.csv : done.") // Get /d/ -> index.csv os.Rename(indexdb, indexdb + ".bak") if err := http_get("/d/", indexdb); err != nil { os.Rename(indexdb + ".bak", indexdb) log.Fatal(err) } fmt.Println("get index.csv : done.") // Get /i/20200110/0800012345.tgz var tgzs []string b, err := os.ReadFile(indexdb) if err != nil { log.Fatal(err) } rd := csv.NewReader(strings.NewReader(string(b))) for { record, err := rd.Read() if err == io.EOF { break } if err != nil { log.Fatal(err) } if strings.HasPrefix(record[0], "0") && strings.Compare(record[1], lastymd) > 0 { tgz := path.Join(record[1], record[0]) + ".tgz" tgzs = append(tgzs, tgz) } } for _, tgz := range tgzs { url := "/i/" + tgz file := filepath.Join(imagedir, filepath.FromSlash(tgz)) dir, _ := filepath.Split(file) err := os.MkdirAll(dir, 0755) if err != nil && !os.IsExist(err) { log.Fatal(err) } http_get(url, file) fmt.Println("get image :", tgz) } // bye } func http_get(url, file string) error { res, err := http.Get(server + url) if err != nil { return err } body, err := io.ReadAll(res.Body) res.Body.Close() if res.StatusCode > 299 { log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body) } if err != nil { return err } err = os.WriteFile(file, body, 0666) if err != nil { return err } return nil }