package main import ( "errors" "fmt" "local/youtuber/config" "local/youtuber/feed" "local/youtuber/youtubedl" "log" "os" "path" "strings" "time" ) func main() { os.Setenv("LC_ALL", "C.UTF-8") client, err := youtubedl.New() if err != nil { panic(err) } interval := time.Hour * 4 for true { err := do(client) if err != nil { log.Println(err) } log.Printf("sleeping until %v", time.Now().Add(interval)) time.Sleep(interval) } } func do(client *youtubedl.Client) error { errs := "" results, err := feed.Fetch(config.Feed) if err != nil { return err } for _, result := range results { target := fmt.Sprintf( "s%02d%02de%02d_%s.%%(ext)s", result.Date.Year()-2000, result.Date.Month(), result.Date.Day(), strings.Join(strings.Split(result.Title, " ")[2:], "_"), ) target = path.Join(config.Root, target) if _, err := os.Stat(strings.ReplaceAll(target, "%(ext)s", "mp4")); !os.IsNotExist(err) { log.Printf("already exists: %s", target) continue } if err := client.Download(result.Link, path.Join(config.Root, target)); err != nil { errs += ", " + err.Error() } } if errs != "" { return errors.New(errs) } return nil }