92 lines
3.5 KiB
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
|
|
}
|