This commit is contained in:
parent
40f322ef01
commit
67eefc2c7a
3 changed files with 129 additions and 30 deletions
107
files-nyaa.go
Normal file
107
files-nyaa.go
Normal file
|
@ -0,0 +1,107 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
|
||||
const NYAA_DOMAIN = "nyaa.si"
|
||||
|
||||
type Nyaa struct{}
|
||||
|
||||
func NewNyaa() *Nyaa {
|
||||
return &Nyaa{}
|
||||
}
|
||||
|
||||
func (n *Nyaa) Name() string {
|
||||
return "nyaa"
|
||||
}
|
||||
|
||||
func (n *Nyaa) getCategoryCode(cat string) string {
|
||||
switch cat {
|
||||
case "all":
|
||||
return ""
|
||||
case "anime":
|
||||
return "&c=1_0"
|
||||
case "music":
|
||||
return "&c=2_0"
|
||||
case "game":
|
||||
return "&c=6_2"
|
||||
case "software":
|
||||
return "&c=6_1"
|
||||
default:
|
||||
return "ignore"
|
||||
}
|
||||
}
|
||||
|
||||
func (n *Nyaa) Search(query string, category string) ([]TorrentResult, error) {
|
||||
categoryCode := n.getCategoryCode(category)
|
||||
if categoryCode == "ignore" {
|
||||
return []TorrentResult{}, nil
|
||||
}
|
||||
|
||||
searchURL := fmt.Sprintf("https://%s/?f=0&q=%s%s", NYAA_DOMAIN, url.QueryEscape(query), categoryCode)
|
||||
|
||||
userAgent, err := GetUserAgent("files-nyaa")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("GET", searchURL, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("User-Agent", userAgent)
|
||||
|
||||
resp, err := DoMetaProxyRequest(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("unexpected status: %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var results []TorrentResult
|
||||
doc.Find(".default, .success, .danger").Each(func(i int, s *goquery.Selection) {
|
||||
tds := s.Find("td")
|
||||
if tds.Length() < 7 {
|
||||
return
|
||||
}
|
||||
|
||||
title := tds.Eq(1).Find("a").Last().Text()
|
||||
magnet, _ := tds.Eq(2).Find("a").Last().Attr("href")
|
||||
sizeStr := strings.TrimSpace(tds.Eq(3).Text())
|
||||
byteSize := parseSize(sizeStr)
|
||||
|
||||
seeders := parseInt(tds.Eq(5).Text())
|
||||
leechers := parseInt(tds.Eq(6).Text())
|
||||
|
||||
results = append(results, TorrentResult{
|
||||
URL: "https://" + NYAA_DOMAIN,
|
||||
Title: title,
|
||||
Magnet: applyTrackers(magnet),
|
||||
Size: formatSize(byteSize),
|
||||
Seeders: seeders,
|
||||
Leechers: leechers,
|
||||
Views: 0,
|
||||
})
|
||||
})
|
||||
|
||||
// Reverse the results slice, so It's from newest to oldest, but the orders is still kinda random
|
||||
for i, j := 0, len(results)-1; i < j; i, j = i+1, j-1 {
|
||||
results[i], results[j] = results[j], results[i]
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue