package ytdl import ( "errors" "fmt" "os/exec" "time" "github.com/tidwall/gjson" ) type YTdl struct { Title string Url string Channel string Len time.Duration } func NewYTdl(uri string) (*YTdl, error) { ytdl_js, err := exec.Command( "./bin/yt-dlp_linux", uri, "--cookies", "./cookies.txt", "--no-call-home", "--no-cache-dir", "--ignore-errors", "--newline", "--restrict-filenames", "-f", "140", "-j", ).Output() if err != nil { return nil, err } if !gjson.ValidBytes(ytdl_js) { return nil, errors.New("invalid json") } results := gjson.GetManyBytes(ytdl_js, "title", "url", "duration", "channel") title := results[0].String() geturl := results[1].String() duration, err := time.ParseDuration(fmt.Sprintf("%ds", results[2].Int())) channel := results[3].String() return &YTdl{title, geturl, channel, duration}, nil }