go-client/example_test.go
Deivid Soto f6f24c2c3f
Some checks failed
CI / Test (push) Failing after 1s
CI / Test-1 (push) Failing after 1s
CI / Test-2 (push) Failing after 1s
CI / Lint (push) Failing after 1s
CI / Vet (push) Failing after 1s
feat: implement TorrentClaw Go API client v0.1.0
2026-03-28 11:28:48 +01:00

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)
}
}