diff options
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | go.sum | 4 | ||||
| -rw-r--r-- | player.go | 2 | ||||
| -rw-r--r-- | youtube.go | 44 |
5 files changed, 33 insertions, 21 deletions
@@ -7,7 +7,7 @@ ## Backends - [X] Implement local storage backend -- [ ] Fix youtube search +- [X] Fix youtube search ## Configuration - [ ] Implement command line flags @@ -3,7 +3,6 @@ module muhq.space/go/wrms go 1.18 require ( - github.com/AnjanaMadu/YTSearch v1.0.0 github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086 github.com/google/uuid v1.3.0 github.com/librespot-org/librespot-golang v0.0.0-20220325184705-31669e5a889f @@ -12,7 +11,6 @@ require ( require ( github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51 // indirect - github.com/buger/jsonparser v1.1.1 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/klauspost/compress v1.15.13 // indirect github.com/miekg/dns v1.1.50 // indirect @@ -1,9 +1,5 @@ -github.com/AnjanaMadu/YTSearch v1.0.0 h1:88ovSXJDVSr/bNQY90CYdpAIDSYtlW2Ik6D8VHRdfFo= -github.com/AnjanaMadu/YTSearch v1.0.0/go.mod h1:ReflwduZK14df7oUOSuNDqLwox2D2heQknhYbEWQlD8= github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51 h1:b6+GdpGhuzxPETrVLwY77iq0L/BqLpcPRmaLNW+SoRY= github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51/go.mod h1:qHRkxMBkkpAWD2poeBYQt6O5IS4dE6w1Cr4Z8Q3feXI= -github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -25,7 +25,7 @@ func NewPlayer(wrms *Wrms, backends []string) Player { case "spotify": b, err = NewSpotify() case "youtube": - b = &YoutubeBackend{} + b = NewYoutubeBackend() case "dummy": b = &DummyBackend{} case "local": @@ -1,34 +1,52 @@ package main import ( + "encoding/json" "fmt" - "github.com/AnjanaMadu/YTSearch" "muhq.space/go/wrms/llog" + "os/exec" + "strings" ) -type YoutubeBackend struct{} +type YoutubeBackend struct { + searchResults int +} + +func NewYoutubeBackend() *YoutubeBackend { + return &YoutubeBackend{10} +} -func (youtube *YoutubeBackend) Play(song *Song, player *Player) { +func (_ *YoutubeBackend) Play(song *Song, player *Player) { player.PlayUri("https://youtube.com/watch?v=" + song.Uri) } -func (youtube *YoutubeBackend) Search(pattern string) []Song { - results, err := ytsearch.Search(pattern) +type YoutubeDlSearchResult struct { + Id string + Title string +} + +func (b *YoutubeBackend) Search(pattern string) []Song { + searchOption := fmt.Sprintf("ytsearch%d:%s", b.searchResults, pattern) + llog.Debug(fmt.Sprintf("Search youtube using: youtube-dl -j %s", searchOption)) + results, err := exec.Command("youtube-dl", "-j", searchOption).Output() + if err != nil { - llog.Error(fmt.Sprintf("Youtube search failed with", err)) + llog.Error(fmt.Sprintf("youtube-dl failed with: %s", err)) } songs := []Song{} - for i, result := range results { - if i == 10 { - break - } - - if result.VideoId == "" { + for _, l := range strings.Split(string(results), "\n") { + if l == "" { continue } - songs = append(songs, NewSong(result.Title, "", "youtube", result.VideoId)) + result := YoutubeDlSearchResult{} + err = json.Unmarshal([]byte(l), &result) + if err != nil { + llog.Debug(fmt.Sprintf("Parsing youtube-dl results '%s' failed", l)) + llog.Error(fmt.Sprintf("Parsing youtube-dl results failed with: %s", err)) + } + songs = append(songs, NewSong(result.Title, "", "youtube", result.Id)) } llog.Debug(fmt.Sprintf("youtube found %d matching videos", len(songs))) |
