main
1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "log"
7 "os"
8 "os/exec"
9 "path/filepath"
10
11 "github.com/bryfry/singles/internal/playlist"
12)
13
14func main() {
15
16 if len(os.Args) < 2 {
17 err := fmt.Errorf("Usage: go run fetch.go <path to playlist.json>")
18 log.Fatal(err)
19 }
20 playlistPath := os.Args[1]
21 playlistDir := filepath.Dir(playlistPath)
22 f, err := os.Open(playlistPath)
23 if err != nil {
24 err = fmt.Errorf("opening playlist: %w", err)
25 log.Fatal(err)
26 }
27
28 var pl playlist.Playlist
29 d := json.NewDecoder(f)
30 err = d.Decode(&pl)
31 if err != nil {
32 err = fmt.Errorf("decoding playlist: %w", err)
33 log.Fatal(err)
34 }
35
36 playlistURL := fmt.Sprintf(
37 "https://music.youtube.com/playlist?list=%s",
38 pl.Id,
39 )
40
41 yt := "yt-dlp"
42 ytPath, err := exec.LookPath(yt)
43 if err != nil {
44 err = fmt.Errorf("%s not found in PATH %w", yt, err)
45 log.Fatal(err)
46 }
47
48 cmd := exec.Command(
49 ytPath,
50 "--extract-audio",
51 "--audio-format", "wav",
52 "--paths", playlistDir,
53 "--output", "%(id)s.%(ext)s",
54 playlistURL,
55 )
56 cmd.Stdout = os.Stdout
57 cmd.Stderr = os.Stderr
58
59 err = cmd.Run()
60 if err != nil {
61 err = fmt.Errorf("running yt-dlp: %w", err)
62 log.Fatal(err)
63 }
64}