e454cdb4c9
prevent unlisted videos from ever publishing (even if they were public before and we know about them) fix timestamp on videos update user agent
130 lines
5.2 KiB
Go
130 lines
5.2 KiB
Go
package ytdl
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/lbryio/ytsync/v5/sdk"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type YtdlVideo struct {
|
|
ID string `json:"id"`
|
|
Title string `json:"title"`
|
|
Thumbnails []Thumbnail `json:"thumbnails"`
|
|
Description string `json:"description"`
|
|
ChannelID string `json:"channel_id"`
|
|
Duration int `json:"duration"`
|
|
Categories []string `json:"categories"`
|
|
Tags []string `json:"tags"`
|
|
IsLive bool `json:"is_live"`
|
|
LiveStatus string `json:"live_status"`
|
|
ReleaseTimestamp int64 `json:"release_timestamp"`
|
|
uploadDateForReal *time.Time
|
|
Availability string `json:"availability"`
|
|
ReleaseDate string `json:"release_date"`
|
|
|
|
//WasLive bool `json:"was_live"`
|
|
//Formats interface{} `json:"formats"`
|
|
//Thumbnail string `json:"thumbnail"`
|
|
//Uploader string `json:"uploader"`
|
|
//UploaderID string `json:"uploader_id"`
|
|
//UploaderURL string `json:"uploader_url"`
|
|
//ChannelURL string `json:"channel_url"`
|
|
//ViewCount int `json:"view_count"`
|
|
//AverageRating interface{} `json:"average_rating"`
|
|
//AgeLimit int `json:"age_limit"`
|
|
//WebpageURL string `json:"webpage_url"`
|
|
//PlayableInEmbed bool `json:"playable_in_embed"`
|
|
//AutomaticCaptions interface{} `json:"automatic_captions"`
|
|
//Subtitles interface{} `json:"subtitles"`
|
|
//Chapters interface{} `json:"chapters"`
|
|
//LikeCount int `json:"like_count"`
|
|
//Channel string `json:"channel"`
|
|
//ChannelFollowerCount int `json:"channel_follower_count"`
|
|
//UploadDate string `json:"upload_date"`
|
|
//OriginalURL string `json:"original_url"`
|
|
//WebpageURLBasename string `json:"webpage_url_basename"`
|
|
//WebpageURLDomain string `json:"webpage_url_domain"`
|
|
//Extractor string `json:"extractor"`
|
|
//ExtractorKey string `json:"extractor_key"`
|
|
//Playlist interface{} `json:"playlist"`
|
|
//PlaylistIndex interface{} `json:"playlist_index"`
|
|
//DisplayID string `json:"display_id"`
|
|
//Fulltitle string `json:"fulltitle"`
|
|
//DurationString string `json:"duration_string"`
|
|
//RequestedSubtitles interface{} `json:"requested_subtitles"`
|
|
//HasDrm bool `json:"__has_drm"`
|
|
//RequestedFormats interface{} `json:"requested_formats"`
|
|
//Format string `json:"format"`
|
|
//FormatID string `json:"format_id"`
|
|
//Ext string `json:"ext"`
|
|
//Protocol string `json:"protocol"`
|
|
//Language interface{} `json:"language"`
|
|
//FormatNote string `json:"format_note"`
|
|
//FilesizeApprox int `json:"filesize_approx"`
|
|
//Tbr float64 `json:"tbr"`
|
|
//Width int `json:"width"`
|
|
//Height int `json:"height"`
|
|
//Resolution string `json:"resolution"`
|
|
//Fps int `json:"fps"`
|
|
//DynamicRange string `json:"dynamic_range"`
|
|
//Vcodec string `json:"vcodec"`
|
|
//Vbr float64 `json:"vbr"`
|
|
//StretchedRatio interface{} `json:"stretched_ratio"`
|
|
//Acodec string `json:"acodec"`
|
|
//Abr float64 `json:"abr"`
|
|
//Asr int `json:"asr"`
|
|
//Epoch int `json:"epoch"`
|
|
//Filename string `json:"filename"`
|
|
//Urls string `json:"urls"`
|
|
//Type string `json:"_type"`
|
|
}
|
|
|
|
type Thumbnail struct {
|
|
URL string `json:"url"`
|
|
Preference int `json:"preference"`
|
|
ID string `json:"id"`
|
|
Height int `json:"height,omitempty"`
|
|
Width int `json:"width,omitempty"`
|
|
Resolution string `json:"resolution,omitempty"`
|
|
}
|
|
|
|
func (v *YtdlVideo) GetUploadTime() time.Time {
|
|
//priority list:
|
|
// release timestamp from yt
|
|
// release timestamp from morty
|
|
// release date from yt
|
|
if v.uploadDateForReal != nil {
|
|
return *v.uploadDateForReal
|
|
}
|
|
|
|
var ytdlReleaseTimestamp time.Time
|
|
if v.ReleaseTimestamp > 0 {
|
|
ytdlReleaseTimestamp = time.Unix(v.ReleaseTimestamp, 0).UTC()
|
|
}
|
|
//get morty timestamp
|
|
var mortyReleaseTimestamp time.Time
|
|
mortyRelease, err := sdk.GetAPIsConfigs().GetReleasedDate(v.ID)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
} else {
|
|
mortyReleaseTimestamp, err = time.ParseInLocation(time.RFC3339, mortyRelease.ReleaseTime, time.UTC)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
}
|
|
|
|
ytdlReleaseDate, err := time.Parse("20060102", v.ReleaseDate)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
|
|
if !ytdlReleaseTimestamp.IsZero() {
|
|
v.uploadDateForReal = &ytdlReleaseTimestamp
|
|
} else if !mortyReleaseTimestamp.IsZero() {
|
|
v.uploadDateForReal = &mortyReleaseTimestamp
|
|
} else {
|
|
v.uploadDateForReal = &ytdlReleaseDate
|
|
}
|
|
return *v.uploadDateForReal
|
|
}
|