347 lines
7.5 KiB
Go
347 lines
7.5 KiB
Go
package torrentclaw_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/torrentclaw/go-client"
|
|
)
|
|
|
|
func Example() {
|
|
client := torrentclaw.NewClient(
|
|
torrentclaw.WithAPIKey("your-api-key"),
|
|
)
|
|
|
|
resp, err := client.Search(context.Background(), torrentclaw.SearchParams{
|
|
Query: "Inception",
|
|
Type: "movie",
|
|
Quality: "1080p",
|
|
Sort: "seeders",
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, result := range resp.Results {
|
|
fmt.Printf("%s (%s)\n", result.Title, result.ContentType)
|
|
for _, t := range result.Torrents {
|
|
fmt.Printf(" %s — %d seeders\n", t.InfoHash, t.Seeders)
|
|
}
|
|
}
|
|
}
|
|
|
|
func ExampleNewClient() {
|
|
// Create a client with default settings.
|
|
_ = torrentclaw.NewClient()
|
|
|
|
// Create a client with API key.
|
|
_ = torrentclaw.NewClient(
|
|
torrentclaw.WithAPIKey("your-api-key"),
|
|
torrentclaw.WithTimeout(30*time.Second),
|
|
torrentclaw.WithRetry(5, 2*time.Second, 60*time.Second),
|
|
)
|
|
|
|
// Create a client with bearer token.
|
|
_ = torrentclaw.NewClient(
|
|
torrentclaw.WithBearerToken("your-bearer-token"),
|
|
)
|
|
}
|
|
|
|
func ExampleClient_Search() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Search(context.Background(), torrentclaw.SearchParams{
|
|
Query: "Breaking Bad",
|
|
Type: "show",
|
|
YearMin: 2008,
|
|
Language: "en",
|
|
Season: 1,
|
|
Episode: 5,
|
|
Page: 1,
|
|
Limit: 5,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Found %d results\n", resp.Total)
|
|
}
|
|
|
|
func ExampleClient_Popular() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Popular(context.Background(), torrentclaw.PopularParams{
|
|
Limit: 10,
|
|
Page: 1,
|
|
Locale: "es",
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, item := range resp.Items {
|
|
fmt.Printf("%s — %d seeders\n", item.Title, item.MaxSeeders)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_Credits() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
credits, err := client.Credits(context.Background(), 42)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if credits.Director != nil {
|
|
fmt.Printf("Director: %s\n", *credits.Director)
|
|
}
|
|
for _, member := range credits.Cast {
|
|
fmt.Printf("%s as %s\n", member.Name, member.Character)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_TorrentDownloadURL() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
url := client.TorrentDownloadURL("abc123def456789012345678901234567890abcd")
|
|
fmt.Println(url)
|
|
// Output: https://torrentclaw.com/api/v1/torrent/abc123def456789012345678901234567890abcd
|
|
}
|
|
|
|
func ExampleClient_Autocomplete() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
suggestions, err := client.Autocomplete(context.Background(), torrentclaw.AutocompleteParams{
|
|
Query: "incep",
|
|
Locale: "es",
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, s := range suggestions {
|
|
fmt.Printf("%s (%s)\n", s.Title, s.ContentType)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_Recent() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Recent(context.Background(), torrentclaw.RecentParams{
|
|
Limit: 10,
|
|
Page: 1,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, item := range resp.Items {
|
|
fmt.Printf("%s — added %s\n", item.Title, item.CreatedAt)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_WatchProviders() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.WatchProviders(context.Background(), 42, "US")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, p := range resp.Providers.Flatrate {
|
|
fmt.Printf("Stream on: %s\n", p.Name)
|
|
}
|
|
if resp.VPNSuggestion != nil {
|
|
fmt.Printf("Also available via VPN in: %v\n", resp.VPNSuggestion.AvailableIn)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_Stats() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
stats, err := client.Stats(context.Background())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Movies: %d, Shows: %d\n", stats.Content.Movies, stats.Content.Shows)
|
|
fmt.Printf("Torrents: %d (with seeders: %d)\n", stats.Torrents.Total, stats.Torrents.WithSeeders)
|
|
}
|
|
|
|
func ExampleClient_GetTorrentFile() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
data, err := client.GetTorrentFile(context.Background(), "abc123def456")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// data contains the raw .torrent file bytes
|
|
_ = data
|
|
}
|
|
|
|
func ExampleWithRetry() {
|
|
// Disable retries entirely.
|
|
_ = torrentclaw.NewClient(torrentclaw.WithRetry(0, 0, 0))
|
|
|
|
// Custom: 5 retries, starting at 2s, capped at 60s.
|
|
_ = torrentclaw.NewClient(
|
|
torrentclaw.WithRetry(5, 2*time.Second, 60*time.Second),
|
|
)
|
|
}
|
|
|
|
func ExampleClient_Trending() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Trending(context.Background(), torrentclaw.TrendingParams{
|
|
Period: "weekly",
|
|
Limit: 10,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Trending (%s):\n", resp.Period)
|
|
for _, item := range resp.Items {
|
|
fmt.Printf(" %s — score %d\n", item.Title, item.TrendScore)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_Upcoming() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Upcoming(context.Background(), torrentclaw.UpcomingParams{
|
|
Type: "movie",
|
|
Limit: 10,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, item := range resp.Items {
|
|
fmt.Printf("%s — releases %s\n", item.Title, item.ReleaseDate)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_Collections() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Collections(context.Background(), torrentclaw.CollectionListParams{
|
|
Limit: 12,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, c := range resp.Items {
|
|
fmt.Printf("%s (%d movies)\n", c.Name, c.MovieCount)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_CollectionByID() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
detail, err := client.CollectionByID(context.Background(), 10, "es")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("%s — %d movies\n", detail.Name, detail.MovieCount)
|
|
for _, m := range detail.Movies {
|
|
fmt.Printf(" %s\n", m.Title)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_StreamingTop() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
items, err := client.StreamingTop(context.Background(), torrentclaw.StreamingTopParams{
|
|
Service: "netflix",
|
|
Country: "US",
|
|
ShowType: "movie",
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, item := range items {
|
|
fmt.Printf("#%d %s (torrents: %v)\n", item.Rank, item.Title, item.HasTorrents)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_DebridCheckCache() {
|
|
client := torrentclaw.NewClient(torrentclaw.WithAPIKey("your-pro-key"))
|
|
|
|
resp, err := client.DebridCheckCache(context.Background(),
|
|
"real-debrid", "your-debrid-key",
|
|
[]string{"abc123...", "def456..."},
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for hash, cached := range resp.Cached {
|
|
fmt.Printf("%s: cached=%v\n", hash, cached)
|
|
}
|
|
}
|
|
|
|
func ExampleClient_DebridAddMagnet() {
|
|
client := torrentclaw.NewClient(torrentclaw.WithAPIKey("your-pro-key"))
|
|
|
|
resp, err := client.DebridAddMagnet(context.Background(),
|
|
"real-debrid", "your-debrid-key", "abc123...",
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Added: %s (cached: %v)\n", resp.Name, resp.Cached)
|
|
}
|
|
|
|
func ExampleClient_Torznab() {
|
|
client := torrentclaw.NewClient(torrentclaw.WithAPIKey("your-pro-key"))
|
|
|
|
// Get capabilities
|
|
caps, err := client.TorznabCaps(context.Background())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
_ = caps // XML bytes
|
|
|
|
// Search for a movie
|
|
data, err := client.Torznab(context.Background(), torrentclaw.TorznabParams{
|
|
T: "movie",
|
|
Q: "inception",
|
|
Limit: 25,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
_ = data // XML bytes
|
|
}
|
|
|
|
func ExampleClient_Health() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
health, err := client.Health(context.Background())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Status: %s, Uptime: %ds\n", health.Status, health.Uptime)
|
|
}
|
|
|
|
func ExampleClient_Mirrors() {
|
|
client := torrentclaw.NewClient()
|
|
|
|
resp, err := client.Mirrors(context.Background())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, m := range resp.Mirrors {
|
|
fmt.Printf("%s — %s (primary: %v)\n", m.Label, m.URL, m.Primary)
|
|
}
|
|
}
|