dndmusicbot/ytdl/ytdl.go

48 lines
877 B
Go
Raw Normal View History

2022-11-18 12:29:39 +00:00
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
}