💾 Archived View for godocs.io › github.com › kkdai › youtube › v2 captured on 2021-12-05 at 23:47:19. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-12-04)

➡️ Next capture (2023-09-28)

🚧 View Differences

-=-=-=-=-=-=-

Package youtube - godocs.io

import "github.com/kkdai/youtube/v2"

Package youtube implement youtube download package in go.

Constants

const (
    ErrCipherNotFound             = constError("cipher not found")
    ErrSignatureTimestampNotFound = constError("signature timestamp not found")
    ErrInvalidCharactersInVideoID = constError("invalid characters in video id")
    ErrVideoIDMinLength           = constError("the video id must be at least 10 characters long")
    ErrReadOnClosedResBody        = constError("http: read on closed response body")
    ErrNotPlayableInEmbed         = constError("embedding of this video has been disabled")
    ErrInvalidPlaylist            = constError("no playlist detected or invalid playlist ID")
)

Functions

func ExtractVideoID

func ExtractVideoID(videoID string) (string, error)

ExtractVideoID extracts the videoID from the given string

Types

type Client

type Client struct {
    // Debug enables debugging output through log package
    Debug bool

    // HTTPClient can be used to set a custom HTTP client.
    // If not set, http.DefaultClient will be used
    HTTPClient *http.Client
    // contains filtered or unexported fields
}

Client offers methods to download video metadata and video streams.

Example

ExampleDownload : Example code for how to use this package for download video.

Code:


videoID := "BaW_jenozKc"
client := youtube.Client{}

video, err := client.GetVideo(videoID)
if err != nil {
    panic(err)
}

stream, _, err := client.GetStream(video, &video.Formats[0])
if err != nil {
    panic(err)
}

file, err := os.Create("video.mp4")
if err != nil {
    panic(err)
}
defer file.Close()

_, err = io.Copy(file, stream)
if err != nil {
    panic(err)
}

func (*Client) GetPlaylist

func (c *Client) GetPlaylist(url string) (*Playlist, error)

GetPlaylist fetches playlist metadata

func (*Client) GetPlaylistContext

func (c *Client) GetPlaylistContext(ctx context.Context, url string) (*Playlist, error)

GetPlaylistContext fetches playlist metadata, with a context, along with a list of Videos, and some basic information for these videos. Playlist entries cannot be downloaded, as they lack all the required metadata, but can be used to enumerate all IDs, Authors, Titles, etc.

func (*Client) GetStream

func (c *Client) GetStream(video *Video, format *Format) (io.ReadCloser, int64, error)

GetStream returns the stream and the total size for a specific format

func (*Client) GetStreamContext

func (c *Client) GetStreamContext(ctx context.Context, video *Video, format *Format) (io.ReadCloser, int64, error)

GetStream returns the stream and the total size for a specific format with a context.

func (*Client) GetStreamURL

func (c *Client) GetStreamURL(video *Video, format *Format) (string, error)

GetStreamURL returns the url for a specific format

func (*Client) GetStreamURLContext

func (c *Client) GetStreamURLContext(ctx context.Context, video *Video, format *Format) (string, error)

GetStreamURLContext returns the url for a specific format with a context

func (*Client) GetVideo

func (c *Client) GetVideo(url string) (*Video, error)

GetVideo fetches video metadata

func (*Client) GetVideoContext

func (c *Client) GetVideoContext(ctx context.Context, url string) (*Video, error)

GetVideoContext fetches video metadata with a context

func (*Client) VideoFromPlaylistEntry

func (c *Client) VideoFromPlaylistEntry(entry *PlaylistEntry) (*Video, error)

func (*Client) VideoFromPlaylistEntryContext

func (c *Client) VideoFromPlaylistEntryContext(ctx context.Context, entry *PlaylistEntry) (*Video, error)

type DecipherOperation

type DecipherOperation func([]byte) []byte

type DecipherOperationsCache

type DecipherOperationsCache interface {
    Get(videoID string) []DecipherOperation
    Set(video string, operations []DecipherOperation)
}

type ErrPlayabiltyStatus

type ErrPlayabiltyStatus struct {
    Status string
    Reason string
}

func (ErrPlayabiltyStatus) Error

func (err ErrPlayabiltyStatus) Error() string

type ErrUnexpectedStatusCode

type ErrUnexpectedStatusCode int

ErrUnexpectedStatusCode is returned on unexpected HTTP status codes

func (ErrUnexpectedStatusCode) Error

func (err ErrUnexpectedStatusCode) Error() string

type Format

type Format struct {
    ItagNo           int    `json:"itag"`
    URL              string `json:"url"`
    MimeType         string `json:"mimeType"`
    Quality          string `json:"quality"`
    Cipher           string `json:"signatureCipher"`
    Bitrate          int    `json:"bitrate"`
    FPS              int    `json:"fps"`
    Width            int    `json:"width"`
    Height           int    `json:"height"`
    LastModified     string `json:"lastModified"`
    ContentLength    int64  `json:"contentLength,string"`
    QualityLabel     string `json:"qualityLabel"`
    ProjectionType   string `json:"projectionType"`
    AverageBitrate   int    `json:"averageBitrate"`
    AudioQuality     string `json:"audioQuality"`
    ApproxDurationMs string `json:"approxDurationMs"`
    AudioSampleRate  string `json:"audioSampleRate"`
    AudioChannels    int    `json:"audioChannels"`

    // InitRange is only available for adaptive formats
    InitRange *struct {
        Start string `json:"start"`
        End   string `json:"end"`
    }   `json:"initRange"`

    // IndexRange is only available for adaptive formats
    IndexRange *struct {
        Start string `json:"start"`
        End   string `json:"end"`
    }   `json:"indexRange"`
}

type FormatList

type FormatList []Format

func (FormatList) AudioChannels

func (list FormatList) AudioChannels(n int) (result FormatList)

AudioChannels returns a new FormatList filtered by the matching AudioChannels

func (FormatList) FindByItag

func (list FormatList) FindByItag(itagNo int) *Format

FindByItag returns the first format matching the itag number

func (FormatList) FindByQuality

func (list FormatList) FindByQuality(quality string) *Format

FindByQuality returns the first format matching Quality or QualityLabel

func (FormatList) Quality

func (list FormatList) Quality(quality string) (result FormatList)

Quality returns a new FormatList filtered by quality, quality label or itag, but not audio quality

func (FormatList) Sort

func (list FormatList) Sort()

Sort sorts all formats fields

func (FormatList) Type

func (list FormatList) Type(t string) (result FormatList)

Type returns a new FormatList filtered by mime type of video

func (FormatList) WithAudioChannels

func (list FormatList) WithAudioChannels() (result FormatList)

AudioChannels returns a new FormatList filtered by the matching AudioChannels

type Playlist

type Playlist struct {
    ID     string
    Title  string
    Author string
    Videos []*PlaylistEntry
}

Example

Example usage for playlists: downloading and checking information.

Code:


playlistID := "PLQZgI7en5XEgM0L1_ZcKmEzxW1sCOVZwP"
client := youtube.Client{}

playlist, err := client.GetPlaylist(playlistID)
if err != nil {
    panic(err)
}

/* ----- Enumerating playlist videos ----- */
header := fmt.Sprintf("Playlist %s by %s", playlist.Title, playlist.Author)
println(header)
println(strings.Repeat("=", len(header)) + "\n")

for k, v := range playlist.Videos {
    fmt.Printf("(%d) %s - '%s'\n", k+1, v.Author, v.Title)
}

/* ----- Downloading the 1st video ----- */
entry := playlist.Videos[0]
video, err := client.VideoFromPlaylistEntry(entry)
if err != nil {
    panic(err)
}
// Now it's fully loaded.

fmt.Printf("Downloading %s by '%s'!\n", video.Title, video.Author)

stream, _, err := client.GetStream(video, &video.Formats[0])
if err != nil {
    panic(err)
}

file, err := os.Create("video.mp4")

if err != nil {
    panic(err)
}

defer file.Close()
_, err = io.Copy(file, stream)

if err != nil {
    panic(err)
}

println("Downloaded /video.mp4")

func (*Playlist) UnmarshalJSON

func (p *Playlist) UnmarshalJSON(b []byte) (err error)

type PlaylistEntry

type PlaylistEntry struct {
    ID       string
    Title    string
    Author   string
    Duration time.Duration
}

type SimpleCache

type SimpleCache struct {
    // contains filtered or unexported fields
}

func NewSimpleCache

func NewSimpleCache() *SimpleCache

func (SimpleCache) Get

func (s SimpleCache) Get(videoID string) []DecipherOperation

Get : get cache when it has same video id and not expired

func (SimpleCache) GetCacheBefore

func (s SimpleCache) GetCacheBefore(videoID string, time time.Time) []DecipherOperation

GetCacheBefore : can pass time for testing

func (*SimpleCache) Set

func (s *SimpleCache) Set(videoID string, operations []DecipherOperation)

Set : set cache with default expiration

type Thumbnail

type Thumbnail struct {
    URL    string
    Width  uint
    Height uint
}

type Thumbnails

type Thumbnails []Thumbnail

type Video

type Video struct {
    ID              string
    Title           string
    Description     string
    Author          string
    Duration        time.Duration
    PublishDate     time.Time
    Formats         FormatList
    Thumbnails      Thumbnails
    DASHManifestURL string // URI of the DASH manifest file
    HLSManifestURL  string // URI of the HLS manifest file
}

func (*Video) FilterQuality

func (v *Video) FilterQuality(quality string)

FilterQuality reduces the format list to formats matching the quality

func (*Video) SortBitrateAsc

func (v *Video) SortBitrateAsc(i int, j int) bool

func (*Video) SortBitrateDesc

func (v *Video) SortBitrateDesc(i int, j int) bool

Details

Version v2.7.4 (latest)

Imports 16 packages

Refresh now

Back to home

Search