Parcourir la Source

Implement archiving for youtube and vimeo

Untested, but could work.  Would be nicer with previews and stuff, but
that's optional and for later.  (Or even better: using different tools.)
Lucas Stadler 8 ans auparavant
Parent
commit
ed87d3e7a4
1 fichiers modifiés avec 38 ajouts et 0 suppressions
  1. 38 0
      go/archive/archive.go

+ 38 - 0
go/archive/archive.go

@ -78,6 +78,9 @@ func main() {
78 78
	var archiveFunc func(string, *url.URL) (string, error)
79 79
80 80
	switch {
81
	case u.Host == "youtube.com" || u.Host == "www.youtube.com" || u.Host == "youtu.be" ||
82
		u.Host == "vimeo.com":
83
		archiver, archiveFunc = "youtube-dl", archiveWithYoutubeDL
81 84
	default:
82 85
		archiver, archiveFunc = "prince", archiveWithPrince
83 86
	}
@ -113,6 +116,41 @@ func main() {
113 116
	}
114 117
}
115 118
119
func archiveWithYoutubeDL(dir string, u *url.URL) (resultPath string, err error) {
120
	cmd := exec.Command("youtube-dl", "--get-filename", u.String(), "--output", "%(url)s.%(ext)s")
121
	cmd.Dir = dir
122
	cmd.Stderr = prefixWriter("    | ", os.Stderr)
123
	buf := new(bytes.Buffer)
124
	cmd.Stdout = buf
125
	fmt.Print("    ", cmd.Args[0])
126
	for _, arg := range cmd.Args[1:] {
127
		fmt.Print(" ", arg)
128
	}
129
	fmt.Println()
130
	err = cmd.Run()
131
	if err != nil {
132
		return "", err
133
	}
134
135
	p := path.Join(dir, buf.String())
136
137
	cmd = exec.Command("youtube-dl", u.String(), "--output", "%(url)s.%(ext)s")
138
	cmd.Dir = dir
139
	cmd.Stderr = prefixWriter("    | ", os.Stderr)
140
	cmd.Stdout = prefixWriter("    | ", os.Stdout)
141
	fmt.Print("    ", cmd.Args[0])
142
	for _, arg := range cmd.Args[1:] {
143
		fmt.Print(" ", arg)
144
	}
145
	fmt.Println()
146
	err = cmd.Run()
147
	if err != nil {
148
		return "", err
149
	}
150
151
	return p, nil
152
}
153
116 154
func archiveWithPrince(dir string, u *url.URL) (resultPath string, err error) {
117 155
	buf := make([]byte, 16)
118 156
	_, err = rand.Read(buf)