mirror of
https://github.com/bytedream/vivo.git
synced 2025-05-09 20:25:09 +02:00
Added cli
This commit is contained in:
parent
b334506528
commit
2150179f2b
138
cmd/main.go
Normal file
138
cmd/main.go
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"runtime"
|
||||||
|
"vivo"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Color int
|
||||||
|
|
||||||
|
var (
|
||||||
|
infos bool
|
||||||
|
source bool
|
||||||
|
output string
|
||||||
|
proxy string
|
||||||
|
clean bool
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
RED Color = iota + 1
|
||||||
|
GREEN
|
||||||
|
MAGENTA
|
||||||
|
CYAN
|
||||||
|
)
|
||||||
|
|
||||||
|
func colorize(color Color, content string) string {
|
||||||
|
var ansiColor, ansiReset string
|
||||||
|
|
||||||
|
if runtime.GOOS != "windows" && !clean {
|
||||||
|
switch color {
|
||||||
|
case RED:
|
||||||
|
ansiColor = "\033[31m"
|
||||||
|
case GREEN:
|
||||||
|
ansiColor = "\033[32m"
|
||||||
|
case MAGENTA:
|
||||||
|
ansiColor = "\033[95m"
|
||||||
|
case CYAN:
|
||||||
|
ansiColor = "\033[96m"
|
||||||
|
}
|
||||||
|
ansiReset = "\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprint(ansiColor + content + ansiReset)
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.BoolVar(&infos, "i", false, "Print information about a vivo video without downloading it")
|
||||||
|
flag.BoolVar(&source, "s", false, "Print the source path to the video file without downloading it")
|
||||||
|
flag.StringVar(&output, "o", ".", "Destination of the file")
|
||||||
|
flag.StringVar(&proxy, "p", "", "Proxy to use")
|
||||||
|
flag.BoolVar(&clean, "c", false, "Show clean output / disable all additions (colors and separator between multiple downloads)")
|
||||||
|
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
e := log.New(os.Stderr, "", 0)
|
||||||
|
|
||||||
|
if flag.NArg() == 0 {
|
||||||
|
e.Fatalln(colorize(RED, "At least one url must be specified"))
|
||||||
|
}
|
||||||
|
|
||||||
|
var client *http.Client
|
||||||
|
if proxy == "" {
|
||||||
|
client = http.DefaultClient
|
||||||
|
} else {
|
||||||
|
proxyURL, err := url.Parse(proxy)
|
||||||
|
if err != nil {
|
||||||
|
e.Fatalln(colorize(RED, err.Error()))
|
||||||
|
}
|
||||||
|
client = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
DisableCompression: true,
|
||||||
|
Proxy: http.ProxyURL(proxyURL),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, URL := range flag.Args() {
|
||||||
|
video, err := vivo.GetVideoWithClient(URL, client)
|
||||||
|
if err != nil {
|
||||||
|
e.Println(colorize(RED, err.Error()))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
videoInformation := fmt.Sprintf("Vivo URL: %s\nSource video URL: %s\nTitle: %s\nQuality: %s\nSize: %s\nMime: %s",
|
||||||
|
colorize(MAGENTA, video.VivoURL),
|
||||||
|
colorize(MAGENTA, video.VideoURL),
|
||||||
|
colorize(MAGENTA, video.Title),
|
||||||
|
colorize(MAGENTA, video.Quality),
|
||||||
|
colorize(MAGENTA, fmt.Sprintf("%.2fMB", float64(video.Length)/1024/1024)),
|
||||||
|
colorize(MAGENTA, video.Mime))
|
||||||
|
|
||||||
|
if infos {
|
||||||
|
fmt.Println(videoInformation)
|
||||||
|
}
|
||||||
|
if source {
|
||||||
|
if infos {
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
fmt.Println(video.VideoURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(infos || source) {
|
||||||
|
fmt.Printf("%s\n\n", videoInformation)
|
||||||
|
|
||||||
|
fileInfo, err := os.Stat(output)
|
||||||
|
if fileInfo != nil && fileInfo.IsDir() {
|
||||||
|
output = path.Join(output, video.Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Create(output)
|
||||||
|
if err != nil {
|
||||||
|
if os.IsPermission(err) {
|
||||||
|
e.Fatalf(colorize(RED, "Permissions denied: Cannot create file '%s'\n"+
|
||||||
|
"You may want to run this program as root again or change the output directory via the `-o` flag\n"), output)
|
||||||
|
} else {
|
||||||
|
e.Fatalln(colorize(RED, err.Error()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf(colorize(CYAN, "Downloading %s to '%s'..."), video.VivoURL, output)
|
||||||
|
if err := video.Download(file); err != nil {
|
||||||
|
e.Fatalln(colorize(RED, err.Error()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf(colorize(GREEN, " finished\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if i != flag.NArg()-1 && !clean {
|
||||||
|
fmt.Println("\n--------------------------------------------------")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user