aboutsummaryrefslogtreecommitdiff
path: root/youtube.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2022-12-27 15:59:15 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2022-12-27 15:59:15 +0100
commit2dd235cc125b9f5c57a22729fdaef3187cdcec06 (patch)
treef7c6b8ef4be50166dfe51c348273aee07823e2df /youtube.go
parent5004fee6ce1eb8fdde6acbe8b5b3d9e61e74859d (diff)
downloadWRMS-0.0.4-alpha.tar.gz
WRMS-0.0.4-alpha.zip
implement youtube search using youtube-dlv0.0.4-alpha
Diffstat (limited to 'youtube.go')
-rw-r--r--youtube.go44
1 files changed, 31 insertions, 13 deletions
diff --git a/youtube.go b/youtube.go
index ad715ce..8997bc9 100644
--- a/youtube.go
+++ b/youtube.go
@@ -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)))