-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
80 lines (68 loc) · 1.64 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"errors"
"flag"
"fmt"
"io"
"log"
"net/http"
"os"
"os/user"
"path/filepath"
"strings"
"github.com/mmcdole/gofeed"
)
func getHTTPClient() (*http.Client, error) {
// setup a http client
httpTransport := &http.Transport{}
httpClient := &http.Client{Transport: httpTransport}
return httpClient, nil
}
func videoDL(destFile string, target string) error {
httpClient, err := getHTTPClient()
if err != nil {
return err
}
resp, err := httpClient.Get(target)
if err != nil {
log.Printf("Http.Get\nerror: %s\ntarget: %s\n", err, target)
return err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
log.Printf("reading answer: non 200[code=%v] status code received: '%v'", resp.StatusCode, err)
return errors.New("non 200 status code received")
}
err = os.MkdirAll(filepath.Dir(destFile), 0755)
if err != nil {
return err
}
out, err := os.Create(destFile)
if err != nil {
return err
}
mw := io.MultiWriter(out)
_, err = io.Copy(mw, resp.Body)
if err != nil {
log.Printf("download video err=%s", err)
return err
}
return nil
}
func main() {
flag.Parse()
log.Println(flag.Args())
usr, _ := user.Current()
currentDir := fmt.Sprintf("%v/Movies/Kent-Recordings", usr.HomeDir)
arg := flag.Arg(0)
fp := gofeed.NewParser()
feed, _ := fp.ParseURL(arg)
log.Print(feed.Title)
feedDir := filepath.Join(currentDir, strings.ReplaceAll(feed.Title, "/", "-"))
for i, item := range feed.Items {
temp := strings.ReplaceAll(fmt.Sprintf("%s.mp4", item.Title), "/", "-")
filename := filepath.Join(feedDir, temp)
fmt.Printf("Downloading video %d: %s...\n", i, temp)
videoDL(filename, item.GUID)
}
}