Refactor yt-dlp calls
This commit is contained in:
65
handlers.go
65
handlers.go
@@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -155,53 +154,33 @@ type Meta struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getYtdlpTitle(url string, args []string) (string, error) {
|
func getYtdlpTitle(url string, args []string) (string, error) {
|
||||||
ytdlp := "yt-dlp"
|
|
||||||
args = append(args, "--simulate", "--print", "%(title)s", url)
|
args = append(args, "--simulate", "--print", "%(title)s", url)
|
||||||
fmt.Println(ytdlp, strings.Join(args, " "))
|
stdout, _, err := runYtdlp(args...)
|
||||||
cmd := exec.Command(ytdlp, args...)
|
|
||||||
|
|
||||||
var stdout bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getYtdlpTitle error:", err, stdout.String())
|
log.Errorln(err)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(stdout.String()), nil
|
return strings.TrimSpace(string(stdout)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getYtdlpArtist(url string, args []string) (string, error) {
|
func getYtdlpArtist(url string, args []string) (string, error) {
|
||||||
ytdlp := "yt-dlp"
|
|
||||||
args = append(args, "--simulate", "--print", "%(uploader)s", url)
|
args = append(args, "--simulate", "--print", "%(uploader)s", url)
|
||||||
fmt.Println(ytdlp, strings.Join(args, " "))
|
stdout, _, err := runYtdlp(args...)
|
||||||
cmd := exec.Command(ytdlp, args...)
|
|
||||||
|
|
||||||
var stdout bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getYtdlpArtist error:", err, stdout.String())
|
log.Errorln(err)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(stdout.String()), nil
|
return strings.TrimSpace(string(stdout)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getYtdlpExt(url string, args []string) (string, error) {
|
func getYtdlpExt(url string, args []string) (string, error) {
|
||||||
ytdlp := "yt-dlp"
|
|
||||||
args = append(args, "--simulate", "--print", "%(ext)s", url)
|
args = append(args, "--simulate", "--print", "%(ext)s", url)
|
||||||
fmt.Println(ytdlp, strings.Join(args, " "))
|
stdout, _, err := runYtdlp(args...)
|
||||||
cmd := exec.Command(ytdlp, args...)
|
|
||||||
|
|
||||||
var stdout bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getYtdlpExt error:", err, stdout.String())
|
log.Errorln(err)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
result := strings.TrimSpace(stdout.String())
|
return strings.TrimSpace(string(stdout)), nil
|
||||||
fmt.Println(result)
|
|
||||||
return result, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getYtdlpMeta(url string, args []string) (Meta, error) {
|
func getYtdlpMeta(url string, args []string) (Meta, error) {
|
||||||
@@ -235,26 +214,21 @@ func getYtdlpVideoMeta(url string) (Meta, error) {
|
|||||||
|
|
||||||
// return the length in seconds of a video file at `path`
|
// return the length in seconds of a video file at `path`
|
||||||
func getLength(path string) (float64, error) {
|
func getLength(path string) (float64, error) {
|
||||||
cmd := exec.Command("ffprobe", "-v", "error", "-show_entries", "format=duration",
|
stdout, _, err := runFfprobe("-v", "error", "-show_entries", "format=duration",
|
||||||
"-of", "default=noprint_wrappers=1:nokey=1", path)
|
"-of", "default=noprint_wrappers=1:nokey=1", path)
|
||||||
|
|
||||||
var stdout bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getLength cmd error:", err)
|
log.Errorln("ffprobe error:", err)
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := strconv.ParseFloat(strings.TrimSpace(stdout.String()), 64)
|
result, err := strconv.ParseFloat(strings.TrimSpace(string(stdout)), 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getLength parse error:", err, stdout.String())
|
log.Errorln("parse error:", err, string(stdout))
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVideoWidth(path string) (uint, error) {
|
func getVideoWidth(path string) (uint, error) {
|
||||||
|
|
||||||
stdout, _, err := runFfprobe("-v", "error", "-select_streams",
|
stdout, _, err := runFfprobe("-v", "error", "-select_streams",
|
||||||
"v:0", "-count_packets", "-show_entries",
|
"v:0", "-count_packets", "-show_entries",
|
||||||
"stream=width", "-of", "csv=p=0", path)
|
"stream=width", "-of", "csv=p=0", path)
|
||||||
@@ -266,27 +240,24 @@ func getVideoWidth(path string) (uint, error) {
|
|||||||
|
|
||||||
result, err := strconv.ParseUint(strings.TrimSpace(string(stdout)), 10, 32)
|
result, err := strconv.ParseUint(strings.TrimSpace(string(stdout)), 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("parse width error:", err, string(stdout))
|
log.Errorln("parse width error:", err, string(stdout))
|
||||||
}
|
}
|
||||||
return uint(result), nil
|
return uint(result), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVideoHeight(path string) (uint, error) {
|
func getVideoHeight(path string) (uint, error) {
|
||||||
cmd := exec.Command("ffprobe", "-v", "error", "-select_streams",
|
stdout, _, err := runFfprobe("-v", "error", "-select_streams",
|
||||||
"v:0", "-count_packets", "-show_entries",
|
"v:0", "-count_packets", "-show_entries",
|
||||||
"stream=height", "-of", "csv=p=0", path)
|
"stream=height", "-of", "csv=p=0", path)
|
||||||
|
|
||||||
var stdout bytes.Buffer
|
|
||||||
cmd.Stdout = &stdout
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getVideoHeight cmd error:", err)
|
log.Errorln("ffprobe error:", err)
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := strconv.ParseUint(strings.TrimSpace(stdout.String()), 10, 32)
|
result, err := strconv.ParseUint(strings.TrimSpace(string(stdout)), 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("getVideoHeight parse error:", err, stdout.String())
|
log.Errorln("getVideoHeight parse error:", err, string(stdout))
|
||||||
}
|
}
|
||||||
return uint(result), nil
|
return uint(result), nil
|
||||||
}
|
}
|
||||||
|
26
ytdlp.go
Normal file
26
ytdlp.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// runs ffprobe with the provided args and returns (stdout, stderr, error)
|
||||||
|
func runYtdlp(args ...string) ([]byte, []byte, error) {
|
||||||
|
ytdlp := "yt-dlp"
|
||||||
|
log.Infoln(ytdlp, strings.Join(args, " "))
|
||||||
|
cmd := exec.Command(ytdlp, args...)
|
||||||
|
var stdout bytes.Buffer
|
||||||
|
var stderr bytes.Buffer
|
||||||
|
cmd.Stdout = &stdout
|
||||||
|
cmd.Stderr = &stderr
|
||||||
|
err := cmd.Run()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("yt-dlp error: %v", err)
|
||||||
|
}
|
||||||
|
log.Infoln("stdout:", stdout.String())
|
||||||
|
log.Infoln("stderr:", stderr.String())
|
||||||
|
return stdout.Bytes(), stderr.Bytes(), err
|
||||||
|
}
|
Reference in New Issue
Block a user