YTSFlix_Go/ytsclient/movie.go

92 lines
3.5 KiB
Go

package ytsclient
import (
"fmt"
"github.com/pkg/errors"
"net/url"
)
type Movie struct {
ID int `json:"id"`
URL string `json:"url"`
ImdbCode string `json:"imdb_code"`
Title string `json:"title"`
TitleEnglish string `json:"title_english"`
TitleLong string `json:"title_long"`
Slug string `json:"slug"`
Year int `json:"year"`
Rating float64 `json:"rating"`
Runtime int `json:"runtime"`
Genres []string `json:"genres"`
DownloadCount int `json:"download_count"`
LikeCount int `json:"like_count"`
State string `json:"state"`
Summary string `json:"summary"`
Synopsis string `json:"synopsis"`
DescriptionIntro string `json:"description_intro"`
DescriptionFull string `json:"description_full"`
YtTrailerCode string `json:"yt_trailer_code"`
Language string `json:"language"`
MpaRating string `json:"mpa_rating"`
BackgroundImage string `json:"background_image"`
BackgroundImageOriginal string `json:"background_image_original"`
SmallCoverImage string `json:"small_cover_image"`
MediumCoverImage string `json:"medium_cover_image"`
LargeCoverImage string `json:"large_cover_image"`
MediumScreenshotImage1 string `json:"medium_screenshot_image1"`
MediumScreenshotImage2 string `json:"medium_screenshot_image2"`
MediumScreenshotImage3 string `json:"medium_screenshot_image3"`
LargeScreenshotImage1 string `json:"large_screenshot_image1"`
LargeScreenshotImage2 string `json:"large_screenshot_image2"`
LargeScreenshotImage3 string `json:"large_screenshot_image3"`
Cast []Cast `json:"cast"`
Torrents []Torrent `json:"torrents"`
DateUploaded string `json:"date_uploaded"`
DateUploadedUnix int `json:"date_uploaded_unix"`
}
type Torrent struct {
URL string `json:"url"`
Hash string `json:"hash"`
Quality string `json:"quality"`
Seeds int `json:"seeds"`
Peers int `json:"peers"`
Size string `json:"size"`
SizeBytes int `json:"size_bytes"`
DateUploaded string `json:"date_uploaded"`
DateUploadedUnix int `json:"date_uploaded_unix"`
}
func (m *Movie) Magnet(t Torrent) (string, error) {
if !contains(m.Torrents, t) {
return "", errors.New("invalid torrent")
}
b := "magnet:?xt=urn:btih:%s&" +
"dn=%s&" +
"tr=udp://glotorrents.pw:6969/announce&" +
"re=udp://tracker.opentrackr.org:1337/announce&" +
"tr=udp://torrent.gresille.org:80/announce&" +
"tr=udp://tracker.openbittorrent.com:80&" +
"tr=udp://tracker.coppersurfer.tk:6969&" +
"tr=udp://tracker.leechers-paradise.org:6969&" +
"tr=udp://tracker.internetwarriors.net:1337"
title := fmt.Sprintf("%s (%d) [%s]", m.Title, m.Year, t.Quality)
return fmt.Sprintf(b, url.QueryEscape(t.Hash), url.QueryEscape(title)), nil
}
type Cast struct {
Name string `json:"name"`
CharacterName string `json:"character_name"`
URLSmallImage string `json:"url_small_image"`
ImdbCode string `json:"imdb_code"`
}
func contains(slice []Torrent, item Torrent) bool {
for _, i := range slice {
if i == item {
return true
}
}
return false
}