/
site_kat.go
70 lines (60 loc) · 1.36 KB
/
site_kat.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"encoding/xml"
"fmt"
"io"
"net/http"
"net/url"
"github.com/gophergala2016/magopie"
)
var kickAssTorrents = site{
Site: magopie.Site{
ID: "kat",
Name: "Kick Ass Torrents",
URL: "https://kat.ph",
Enabled: true,
},
search: func(term string) ([]magopie.Torrent, error) {
url := fmt.Sprintf(
"https://kat.cr/usearch/%s/?rss=1",
url.QueryEscape(term),
)
res, err := http.DefaultClient.Get(url)
if err != nil {
return nil, err
}
defer res.Body.Close()
if res.StatusCode != 200 {
return nil, ErrFailedRequest
}
return katParse(res.Body)
},
}
func katParse(r io.Reader) ([]magopie.Torrent, error) {
var d struct {
Items []struct {
Title string `xml:"title"`
ContentLength int `xml:"contentLength"`
Hash string `xml:"infoHash"`
Seeds int `xml:"seeds"`
Peers int `xml:"peers"`
MagnetURI string `xml:"magnetURI"`
} `xml:"channel>item"`
}
if err := xml.NewDecoder(r).Decode(&d); err != nil {
return nil, err
}
ts := make([]magopie.Torrent, len(d.Items))
for i, item := range d.Items {
ts[i] = magopie.Torrent{
ID: item.Hash,
Title: item.Title,
Seeders: item.Seeds,
Leechers: item.Peers - item.Seeds,
Size: item.ContentLength,
MagnetURI: item.MagnetURI,
SiteID: "kat",
}
}
return ts, nil
}