|
|
@ -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)
|