]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent/scrape.go
ce5fc06c89e70b8cb04e419cd49b7b3e108b7838
[btrtrc.git] / cmd / torrent / scrape.go
1 package main
2
3 import (
4         "context"
5         "fmt"
6         "net/url"
7
8         "github.com/davecgh/go-spew/spew"
9
10         "github.com/anacrolix/torrent"
11         "github.com/anacrolix/torrent/tracker/udp"
12 )
13
14 type scrapeCfg struct {
15         Tracker    string             `arg:"positional"`
16         InfoHashes []torrent.InfoHash `arity:"+" arg:"positional"`
17 }
18
19 func scrape(flags scrapeCfg) error {
20         trackerUrl, err := url.Parse(flags.Tracker)
21         if err != nil {
22                 return fmt.Errorf("parsing tracker url: %w", err)
23         }
24         cc, err := udp.NewConnClient(udp.NewConnClientOpts{
25                 Network: trackerUrl.Scheme,
26                 Host:    trackerUrl.Host,
27                 //Ipv6:    nil,
28                 //Logger:  log.Logger{},
29         })
30         if err != nil {
31                 return fmt.Errorf("creating new udp tracker conn client: %w", err)
32         }
33         defer cc.Close()
34         var ihs []udp.InfoHash
35         for _, ih := range flags.InfoHashes {
36                 ihs = append(ihs, ih)
37         }
38         scrapeOut, err := cc.Client.Scrape(context.TODO(), ihs)
39         if err != nil {
40                 return fmt.Errorf("scraping: %w", err)
41         }
42         spew.Dump(scrapeOut)
43         return nil
44 }