## goutubedl Go wrapper for [youtube-dl](https://github.com/ytdl-org/youtube-dl) and [yt-dlp](https://github.com/yt-dlp/yt-dlp). Currently only tested and developed using yt-dlp. API documentation can be found at [godoc.org](https://pkg.go.dev/gitea.kaz62.ru/dilap54/goutubedl?tab=doc). See [yt-dlp documentation](https://github.com/yt-dlp/yt-dlp) for how to install and what is recommended to install in addition to yt-dl. goutubedl default uses `PATH` to find `youtube-dl` or `yt-dlp` (in that order) but can be configured with the `goutubedl.Path` variable. Due to the nature of and frequent updates of yt-dl only the latest version is tested. But it seems to work well with older versions also. ### Usage From [cmd/example/main.go](cmd/example/main.go) ```go package main import ( "context" "io" "log" "os" "gitea.kaz62.ru/dilap54/goutubedl" ) func main() { result, err := goutubedl.New(context.Background(), "https://www.youtube.com/watch?v=jgVhBThJdXc", goutubedl.Options{}) if err != nil { log.Fatal(err) } downloadResult, err := result.Download(context.Background(), "best") if err != nil { log.Fatal(err) } defer downloadResult.Close() f, err := os.Create("output") if err != nil { log.Fatal(err) } defer f.Close() io.Copy(f, downloadResult) } ``` See [goutubedl cmd tool](cmd/goutubedl/main.go) or [ydls](https://github.com/wader/ydls) for usage examples. ### Default options and cache #### .netrc goutubedl by default uses `--netrc` to use `~/.netrc` authentication data. #### Cache directory yt-dlp stores various extractor session data to speed up things in `${XDG_CACHE_HOME}/yt-dlp` (usually `~/.cache/yt-dlp`). You might want to preverse this directory if your running things in ephemeral conatiners etc. ### Development ```sh docker build --target dev -t goutubedl-dev . docker run --rm -ti -v "$PWD:$PWD" -w "$PWD" goutubedl-dev go test -v -race -cover ```