package main import ( "bufio" "fmt" "log" "os" "regexp" //"path/filepath" . "github.com/kkdai/youtube" ) type Batch struct { batchfile, destDir string } func NewBatch(batchFile, destinationDir string) *Batch { return &Batch{batchfile: batchFile, destDir: destinationDir} } func (b *Batch) Start() { //Start downloading all videos //open the file containing yt links linkfile, err := os.Open(b.batchfile) if err != nil { log.Fatal(err) } defer linkfile.Close() //Create scanner to go line by line through the file //This scanner allows 65536 characters per line. //That should be enough for yt links. scanner := bufio.NewScanner(linkfile) for scanner.Scan() { //Call download go downloadVideo(b.destDir, scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } } func downloadVideo(destDir, url string) { // NewYoutube(debug) if debug parameter will set true we can log of messages y := NewYoutube(false) y.DecodeURL(url) re := regexp.MustCompile("(mp4|webm|3gpp)") fileext := re.FindString(y.StreamList[0]["type"]) filename := fmt.Sprintf("%s/%s.%s", destDir, y.StreamList[0]["title"], fileext) log.Println("Start downloading:", filename) y.StartDownload(filename) log.Println("Finished downloading:", filename) }