package metadata type Metadata struct { Type string `json:"_type"` // A list of videos in the playlist Entries []Metadata // Video identifier. ID string `json:"id"` // Video title, unescaped. Set to an empty string if video has // no title as opposed to "None" which signifies that the // extractor failed to obtain a title Title *string `json:"title"` // A list of dictionaries for each format available, ordered // from worst to best quality. Formats []Format `json:"formats"` // Final video URL. Url string `json:"url"` // Video filename extension. Ext string `json:"ext"` // The video format, defaults to ext (used for --get-format) Format string `json:"format"` // True if a direct video file was given (must only be set by GenericIE) Direct *bool `json:"direct"` // A secondary title of the video. AltTitle *string `json:"alt_title"` // An alternative identifier for the video, not necessarily // unique, but available before title. Typically, id is // something like "4234987", title "Dancing naked mole rats", // and display_id "dancing-naked-mole-rats" DisplayID *string `json:"display_id"` Thumbnails []Thumbnail `json:"thumbnails"` // Full URL to a video thumbnail image. Thumbnail *string `json:"thumbnail"` // Full video description. Description *string `json:"description"` // Full name of the video uploader. Uploader *string `json:"uploader"` // License name the video is licensed under. License *string `json:"license"` // The creator of the video. Creator *string `json:"creator"` // UNIX timestamp of the moment the video was uploaded Timestamp *float64 `json:"timestamp"` // Video upload date in UTC (YYYYMMDD). // If not explicitly set, calculated from timestamp UploadDate *string `json:"upload_date"` // UNIX timestamp of the moment the video was released. // If it is not clear whether to use timestamp or this, use the former ReleaseTimestamp *float64 `json:"release_timestamp"` // The date (YYYYMMDD) when the video was released in UTC. // If not explicitly set, calculated from release_timestamp ReleaseDate *string `json:"release_date"` // UNIX timestamp of the moment the video was last modified. ModifiedTimestamp *float64 `json:"modified_timestamp"` // The date (YYYYMMDD) when the video was last modified in UTC. // If not explicitly set, calculated from modified_timestamp ModifiedDate *string `json:"modified_date"` // Nickname or id of the video uploader. UploaderId *string `json:"uploader_id"` // Full URL to a personal webpage of the video uploader. UploaderUrl *string `json:"uploader_url"` // Full name of the channel the video is uploaded on. // Note that channel fields may or may not repeat uploader // fields. This depends on a particular extractor. Channel *string `json:"channel"` // Id of the channel. ChannelId *string `json:"channel_id"` // Full URL to a channel webpage. ChannelUrl *string `json:"channel_url"` // Number of followers of the channel. ChannelFollowerCount *int `json:"channel_follower_count"` // Physical location where the video was filmed. Location *string `json:"location"` // The available subtitles as a dictionary in the format // {tag: subformats}. "tag" is usually a language code, and // "subformats" is a list sorted from lower to higher // preference Subtitles map[string][]Subtitle `json:"subtitles"` // Like 'subtitles'; contains automatically generated // captions instead of normal subtitles AutomaticCaptions map[string][]Subtitle `json:"automatic_captions"` // Length of the video in seconds, as an integer or float. Duration *float64 `json:"duration"` // How many users have watched the video on the platform. ViewCount *int64 `json:"view_count"` // How many users are currently watching the video on the platform. ConcurrentViewCount *int64 `json:"concurrent_view_count"` // Number of positive ratings of the video LikeCount *int64 `json:"like_count"` // Number of negative ratings of the video DislikeCount *int64 `json:"dislike_count"` // Number of reposts of the video RepostCount *int64 `json:"repost_count"` // Average rating give by users, the scale used depends on the webpage AverageRating *float64 `json:"average_rating"` // Number of comments on the video CommentCount *int64 `json:"comment_count"` // A list of comments Comments []Comment `json:"comments"` // Age restriction for the video, as an integer (years) AgeLimit *int `json:"age_limit"` // The URL to the video webpage, if given to yt-dlp it // should allow to get the same result again. (It will be set // by YoutubeDL if it's missing) WebpageUrl *string `json:"webpage_url"` // A list of categories that the video falls in Categories []string `json:"categories"` // A list of tags assigned to the video Tags []string `json:"tags"` // A list of the video cast Cast []string `json:"cast"` // Whether this video is a live stream that goes on instead of a fixed-length video. IsLive *bool `json:"is_live"` // Whether this video was originally a live stream. WasLive *bool `json:"was_live"` // None (=unknown), 'is_live', 'is_upcoming', 'was_live', 'not_live', // or 'post_live' (was live, but VOD is not yet processed) // If absent, automatically set from is_live, was_live LiveStatus *string `json:"live_status"` // Time in seconds where the reproduction should start, as // specified in the URL. StartTime *float64 `json:"start_time"` // Time in seconds where the reproduction should end, as // specified in the URL. EndTime *float64 `json:"end_time"` Chapters []Chapter `json:"chapters"` } func (m Metadata) IsPlaylist() bool { return m.Type == "playlist" }